, boost::flat_set.
, , , . , unordered_, .
, unordered_map, , unordered_multiset, , , , .
, , .
, - :
class Person {
public:
Person(const std::string& name, const int age) : name_(name), age_(age) {}
public:
const std::string& name() const { return name_; }
int age() const { return age_; }
private:
std::string name_;
int age_;
};
int main()
{
Person p1("Joe", 11), p2("Jane", 22), p3("James", 33), p4("Joe", 44);
std::unordered_multimap<size_t, Person> persons{ {std::hash<std::string>()(p1.name()), p1}, {std::hash<std::string>()(p2.name()), p2},{std::hash<std::string>()(p3.name()), p3}, {std::hash<std::string>()(p4.name()), p4} };
auto potential_joes = persons.equal_range(std::hash<std::string>()("Joe"));
for (auto it = potential_joes.first; it != potential_joes.second; ++it) {
if (it->second.name() == "Joe") {
std::cout << it->second.name() << " is " << it->second.age() << " years old" << std::endl;
}
}
}
, , , .
, unordred_map , .
, , .
, , , , , name_ const , const.