Now I also have much clear thought for Part B (similarity search). Several days ago you suggested me to make the "searcher" class behave like a container. Currently I think similarity search is very like exact search, where we usually use the "unordered_map". In fact, when we call the functions "find" or "operator[]" of an "unordered_map", exactly matched values are returned. Here, what I want to implement is just to return similar matched values. So here I'd like to make my searcher class like an "unordered_map". I 'll support as much as possible functions in the "unordered_map" as long as it's useful and compatible.
Yes, I think what you have here is a new variation of Associative Container concept. Maybe a subclass of Unique Associative Container, augmented with a distance-metric functor, and having new query methods augmented with a radius. "Neighborhood Associative Container"? "Metric Associative Container"? I'm not familiar with how the similarity search container will want to work - whether it is a Simple Associative Container (like set<>), or a Paired Associative Container (like map<>). Seems as though it has set-like behavior, where you're maintaining a set of objects, and then you query it for all the members that are with some radius of a given query-object.