首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用std::std::vector<std::vector<std::string>>检查项目

使用std::std::vector<std::vector<std::string>>检查项目
EN

Stack Overflow用户
提问于 2014-07-22 15:34:17
回答 2查看 145关注 0票数 1

我有以下目标

代码语言:javascript
运行
复制
std::vector<std::vector<std::string>> vectorList;

然后,我添加到这个使用

代码语言:javascript
运行
复制
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>所包含的vectorList仅是二维的,没有重复的.这很好,但我现在只想检查vectorList是否包含索引为零的项,该项等于当前的strDrg。在C#中,我甚至不会考虑到这一点,但使用C++似乎并不直接。如何找到vectorList中是否存在一个向量,其中strDrg已经存在于vectorList.at(i)[0]

注意:我可以使用助推。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-22 15:39:38

find_if与lambda一起使用:

代码语言:javascript
运行
复制
std::find_if(vectorList.begin(), vectorList.end(), 
  [&strDrg](const std::vector<std::string>& v) { return v[0] == strDrg; });

您似乎不需要vector的全部功能来实现您的内部元素。考虑使用:

代码语言:javascript
运行
复制
std::vector<std::array<std::string, 2>>

而不是。

票数 1
EN

Stack Overflow用户

发布于 2014-07-22 15:44:47

对于完全按照您的要求进行的操作,std::find_if@chris在评论中建议的lambda是最好的:

代码语言:javascript
运行
复制
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<...>来代替内部向量。

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

对:成员first

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24891666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档