A std::map
- это ассоциативный контейнер, который позволяет вам иметь уникальный ключ, связанный со значением вашего типа.Например,
void someFunction()
{
typedef std::map<std::string, int> MapType;
MapType myMap;
// insertion
myMap.insert(MapType::value_type("test", 42));
myMap.insert(MapType::value_type("other-test", 0));
// search
auto it = myMap.find("test");
if (it != myMap.end())
std::cout << "value for " << it->first << " is " << it->second << std::endl;
else
std::cout << "value not found" << std::endl;
}
A std::multimap
равно std::map
, но ваши ключи больше не являются уникальными.Поэтому вы можете найти ряд предметов, а не просто найти один уникальный предмет.Например,
void someFunction()
{
typedef std::multimap<std::string, int> MapType;
MapType myMap;
// insertion
myMap.insert(MapType::value_type("test", 42));
myMap.insert(MapType::value_type("test", 45));
myMap.insert(MapType::value_type("other-test", 0));
// search
std::pair<auto first, auto second> range = myMap.equal_range("test");
for (auto it = range.first; it != range.second; ++it)
std::cout << "value for " << it->first << " can be " << it->second << std::endl;
}
std::set
похож на std::map
, но он не хранит ключ, связанный со значением.Он хранит только тип ключа и гарантирует, что он уникален в наборе.
У вас также есть std::multiset
, который следует той же схеме.(log (n)) доступ с их find / equal_range.