有没有办法找出映射是否包含公共值?
1 : 2
2 : 5
3 : 2
4 : 6
5 : 2
上面的键1、3和5具有共同的值。
如果可能的话,我尽量不使用循环。
我查看了映射键比较和值比较功能,但不确定这是否实现了我想要做的
编辑:我有兴趣看看是否有地图的任何成员函数或任何其他我可以使用的函数。
假设初始映射为m:
1 : 2
2 : 5
3 : 2
4 : 6
5 : 2
//创建新的地图
map<int , vector<int>> m2;
for(auto it: m)
{
m2[it.second].push_back(it.first);
}
//这将根据需要创建一个地图,即
2 : [1,3,5]
5 : [2]
6 : [4]
//打印或使用新地图
for(auto it: m2)
{
cout<<it.first<<": "<<endl;
for(auto it1 : it.second)
{
cout<<it1<<" ";
}
cout<<endl;
}
//这将生成一个类似于的输出
2 : 1 3 5
5 : 2
6 : 4
映射中的值只是一个无序序列。要查找重复项,您需要在另一个容器中组织值,以便轻松查找重复项。例如,将值(如果复制值不便宜,则指向值的指针(复制到数组中并对数组进行排序。
std::map没有成员函数,它可以根据值返回重复。
更多详细信息:https://en.cppreference.com/w/cpp/container/map
另一种方法是,正如我在评论中提到的,你必须至少迭代一次地图。填写std::map<int,std::list<int>>
。