c – 在std :: vector中找到

前端之家收集整理的这篇文章主要介绍了c – 在std :: vector中找到前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一对矢量.该对中的第一个类型为std :: string,第二个类型为Container.

在std或boost中存在什么方便的功能,以便我可以返回一个给定字符串值的容器作为键?

UPDATE

有人评论说,我可以使用std :: map,但实际上我需要按照我把它们推送到向量的顺序来保存我的项目的顺序.

解决方法

一个可能的解决方案:
struct comp
{
    comp(std::string const& s) : _s(s) { }

    bool operator () (std::pair<std::string,Container> const& p)
    {
        return (p.first == _s);
    }

    std::string _s;
};

// ...

typedef std::vector<std::pair<std::string,Container> > my_vector;
my_vector v;

// ...

my_vector::iterator i = std::find_if(v.begin(),v.end(),comp("World"));
if (i != v.end())
{
    Container& c = i->second;
}

// ...

这是一个完整的例子:

#include <vector>
#include <utility>
#include <string>
#include <algorithm>

struct Container
{
    Container(int c) : _c(c) { }
    int _c;
};

struct comp
{
    comp(std::string const& s) : _s(s) { }

    bool operator () (std::pair<std::string,Container> const& p)
    {
        return (p.first == _s);
    }

    std::string _s;
};

#include <iostream>

int main()
{
    typedef std::vector<std::pair<std::string,Container> > my_vector;
    my_vector v;
    v.push_back(std::make_pair("Hello",Container(42)));
    v.push_back(std::make_pair("World",Container(1729)));
    my_vector::iterator i = std::find_if(v.begin(),comp("World"));
    if (i != v.end())
    {
        Container& c = i->second;
        std::cout << c._c; // <== Prints 1729
    }
}

这里是live example.

猜你在找的C&C++相关文章