我有以下对象
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
vectorList
中strDrg
已存在的vectorList.at(i)[0]
中是否存在向量?
注意:我可以使用boost。
答案 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);