std :: multimap的用例

Pup*_*ppy 4 c++11

我不太了解这个数据结构的目的.std::multimap<K, V>和之间的区别是什么std::map<K, std::vector<V>>.同样的事情std::multiset- 它可能只是std::map<K, int>int计算K的出现次数的地方.我是否遗漏了这些结构的用途?

Cap*_*ffe 5

一个反例似乎是有序的.

考虑按名称分组的AdressList中的PhoneEntry.

int AdressListCompare(const PhoneEntry& p1, const PhoneEntry& p2){
    return p1.name<p2.name;
}

multiset<PhoneEntry, AdressListCompare> adressList;

adressList.insert( PhoneEntry("Cpt.G", "123-456", "Cellular") );    
adressList.insert( PhoneEntry("Cpt.G", "234-567", "Work") );
// Getting the entries
addressList.equal_range( PhoneENtry("Cpt.G") ); // All numbers
Run Code Online (Sandbox Code Playgroud)

使用set + count这是不可行的.如果不需要此行为,则对象+计数方法似乎更快.例如multiset :: count()成员状态

"复杂性:大小对数+计数线性."


Pep*_*epe -3

多重映射或多集允许您拥有具有重复键的元素。

即集合是一组无序的元素,它们在 {A,B,C} == {B,C,A} 中都是唯一的