检查std :: vector <std :: vector <std :: string>&gt;中的项目使用std :: find </std :: vector <std :: string>

时间:2014-07-22 15:34:18

标签: c++

我有以下对象

std::vector<std::vector<std::string>> vectorList;

然后我使用

添加到此
std::vector<std::string> vec_tmp;
vec_tmp.push_back(strDRG);
vec_tmp.push_back(strLab);
if (std::find(vectorList.begin(), vectorList.end(), vec_tmp) == vectorList.end())
    vectorList.push_back(vec_tmp);

包含std::vector<std::string>的{​​{1}}只是二维的,没有重复。这很好用,但我现在只想检查vectorList是否包含索引零等于当前vectorList的项目。在C#中,我甚至不会考虑这个问题,但是使用C ++这似乎并不简单。如何查找strDrg vectorListstrDrg已存在的vectorList.at(i)[0]中是否存在向量?

注意:我可以使用boost。

2 个答案:

答案 0 :(得分:1)

find_if与lambda:

一起使用
std::find_if(vectorList.begin(), vectorList.end(), 
  [&strDrg](const std::vector<std::string>& v) { return v[0] == strDrg; });

对于你的内在元素,你似乎不需要vector的全部力量。考虑使用:

std::vector<std::array<std::string, 2>>

代替。

答案 1 :(得分:1)

为了完全按照您的要求进行操作,std::find_if评论中提出的lambda为@chris是最好的:

std::find_if(ob.begin(), ob.end(),
    [&](const auto x){return x[0] == strDRG;});
// Replace auto with "decltype(ob[0])&" until
//you have a C++1y compiler. Might need some years.

但如果您只有两个元素,请考虑使用std::array<...>std::pair<...>std::tuple<...>代替内部向量。

对于元组和对,您需要以不同方式访问第一个元素:

pair:member first
元组:使用get<0>(x);