在STL列表中找到只有第一个元素的对

时间:2013-07-31 08:51:11

标签: c++ list map stl queue

保证我有一个(已填写)清单

std::list<std::pair<int,otherobject>> myList;

并且想要查找()此列表中的第一个元素,其中int具有特定值 - 我该怎么做?

进一步解释:

我想将这些对附加到列表中,其中int标识了otherobject但不是唯一的。必须保留这些int / otherobject对到达的顺序。

在访问此列表的元素期间找到int时,必须返回(并删除)该int的第一个出现。

谢谢!

2 个答案:

答案 0 :(得分:9)

我想我会使用标准find_if算法:

auto pos = std::find_if(myList.begin(), myList.end(),
                        [value](std::pair<int, otherobject> const &b) { 
                            return b.first == value; 
                        });

它为具有所需值的元素提供了一个迭代器 - 从那里,您可以复制值,删除值等,就像使用任何其他迭代器一样。

答案 1 :(得分:1)

根据您的需要,更好的选择是使用多图。 在你的情况下,它会给:

std::multimap<int, otherobject> myMultiMap;

然后在寻找链接到int(myInt)的其他对象时,你会这样做:

    std::pair<std::multimap<int, otherobject>::iterator, std::multimap<int, otherobject>::iterator> result = myMultiMap.equal_range(myInt);

    for (std::multimap<int,otherobject>::iterator iter=result.first; iter!=result.second; ++iter)
    {
        std::cout << it->second;
    }

这是一个STL容器,因此您可以轻松找到在线文档。