我有一些(工作)代码使用multimap<string,string>.我想改变它以禁止同一个键上的重复值(显然,同一个键上的不同值很好,否则我不会使用多个映射).
令人惊讶的是类型不似乎有一个内置的方式,以避免重复,也没有找到一个键值对(只找到一把钥匙).但我认为有人必须有一个现成的解决方法.任何人?
这是我想出的:
template<class K, class V>
typename multimap<K, V>::const_iterator find_pair(const multimap<K, V>& map, const pair<K, V>& pair)
{
typedef multimap<K, V>::const_iterator it;
std::pair<it,it> range = map.equal_range(pair.first);
for (it p = range.first; p != range.second; ++p)
if (p->second == pair.second)
return p;
return map.end();
}
template<class K, class V>
bool insert_if_not_present(multimap<K, V>& map, const pair<K, V>& pair)
{
if (find_pair(map, pair) == map.end()) {
map.insert(pair);
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
(当单个键附加大量值时,这效率不高,但在我的情况下,每个键上的值很少。)