如何遍历STL映射(查找所有可能的对)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何遍历STL映射(查找所有可能的对)相关的知识,希望对你有一定的参考价值。

如何遍历STL映射以面对所有元素。换句话说,我想找到所有可能的对。我想要一个有效的算法(复杂度)。

如果具有STL向量,则算法很简单。

vector<int> vInt;
vector<pair<int, int> > vPair;
for(int i = 0; i < vInt.size(); i++) {
    for(int j = i + 1; j < vInt.size(); j++) {
        vPair.push_back(make_pair(vInt[i], vInt[j]));
    }
}

但是,如果您有像算法一样的STL映射?

Obs:我希望所有可能的组合都是map的值(不是键)

map<int, int> map;
vector<pair<int, int> > vPair;
???

我曾考虑过在STL向量中转换为STL映射,但是我会只使用STL映射的方法

答案

“我希望所有可能的组合值是地图的值(不是键)”

我不确定您想要什么,但是如果要完全按照示例中对向量所做的操作,在地图的“值”上进行>

您可以按照以下步骤进行操作:

std::map<int, int> map;
std::map<int,int>::iterator i,j,end=m.end();  
std::vector<std::pair<int,int> > vpair;
end--;
for(i=m.begin();i!=end;++i)
{
    j=i;
    j++;
    for(;j!=m.end();++j)
        vpair.push_back(std::make_pair(i->second,j->second));
 }
另一答案

非常简单,地图像矢量一样具有开始和结束迭代器,因此您可以执行此操作。

另一答案

同时使用begin()end()来迭代vectormap的所有元素。

另一答案

我喜欢这种方法。

另一答案

您可以使用j = std::next(i)来实现j = i + 1,然后代码与矢量例几乎相同:

以上是关于如何遍历STL映射(查找所有可能的对)的主要内容,如果未能解决你的问题,请参考以下文章

C++拾趣——STL容器的插入删除遍历和查找操作性能对比(ubuntu g++)——遍历和查找

最快的 c++ / stl 算法来查找成对的字符串

C++拾趣——STL容器的插入删除遍历和查找操作性能对比(Windows VirtualStudio)——遍历和删除

如何在 STL 映射中迭代 STL 映射?

C++拾趣——STL容器的插入删除遍历和查找操作性能对比(Windows VirtualStudio)——删除

C++拾趣——STL容器的插入删除遍历和查找操作性能对比(ubuntu g++)——删除