c++ - 具有唯一键的 multimap

标签 c++ stl

使用 multimap如下所示:

multimap<int, string> mm;
mm.insert(make_pair(1, "jack"));
mm.insert(make_pair(1, "jack"));
mm.insert(make_pair(1, "jack"));
mm.insert(make_pair(1, "joe"));
mm.insert(make_pair(2, "david"));
mm.insert(make_pair(2, "daniel"));
mm.insert(make_pair(3, "alex"));

for (multimap<int, string>::iterator itr = mm.begin(); itr != mm.end(); itr++)
{
    cout << "key: " << itr->first << ", value: " << itr->second << endl;
}

结果:

key: 1, value: jack
key: 1, value: jack
key: 1, value: jack
key: 1, value: joe
key: 2, value: david
key: 2, value: daniel
key: 3, value: alex

如您所见,键 1有两个不同的值 joejack没关系。但是有两个重复的 <1,"jack">在容器中。

我怎样才能摆脱那些重复的项目?有没有满足我要求的标准容器?或者,我们如何结合现有的容器来实现我的目标(效率非常非常重要)?

最佳答案

在 STL 中,您可以使用 std::pair 创建一个容器,其键(或值)是多个值的组合,因此您可以将您的 multimap进入集合:

set<pair<int, string> >

对于两个值的每个组合,生成的容器只能包含一个条目。

关于c++ - 具有唯一键的 multimap ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13478049/

相关文章:

c++ - 如果没有找到 map 元素会返回什么?

c++ - 为线程安全写入映射中的队列时互斥

C++:容器替换 vector/deque 的巨大尺寸

c++ - 如何使用 typeinfo.name C++ 声明变量

c++ - 覆盖从 c struct 继承的函数

c++ - 传递函数的返回值作为引用

C++ - 如何使显式导入的 DLL 函数对其他类可用

转发到唯一方法的 C++11 重载方法

c++ - 什么是用于 C++ UTF-8/UTF-16 文本编码的小型 LGPL 库?

c++ - 无法获取 "stack"以填充基于 DFS 的任务排序程序