如何避免重复对/在multimap中找到一对?

Qwe*_*tie 7 c++ multimap

我有一些(工作)代码使用multimap<string,string>.我想改变它以禁止同一个键上的重复值(显然,同一个键上的不同值很好,否则我不会使用多个映射).

令人惊讶的是类型不似乎有一个内置的方式,以避免重复,也没有找到一个键值对(只找到一把钥匙).但我认为有人必须有一个现成的解决方法.任何人?

Qwe*_*tie 5

这是我想出的:

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)

(当单个键附加大量值时,这效率不高,但在我的情况下,每个键上的值很少。)