我将此文件存储在 vector<vector<string>>
中:
1 a aa # vector of string stored to `vector<vector<string>>`
2 b bb
3 c cc # c -> index == 2
4 d dd
C++代码:
vector<vector<string>> myvect =
{{"1","a","aa"},
{"2","b","bb"},
{"3","c","cc"},
{"4","d","dd"}};
如何搜索 c
在第二列中并获取其索引(我知道它在第二个 vector 中)- 输出应为 2。
我想使用 find
或 find_if
功能。
最佳答案
如果您特别想搜索内部 vector 的第 2 列,您可以使用 transform_iterator
和常规 find
。
transform_iterator
在 boost
中看起来像这样:
std::vector< std::vector< std::string > > v;
auto lambda = [] ( std::vector< std::string > const& v ) { return v[1]; };
auto transform_end = boost::make_transform_iterator ( v.end() );
return std::find( boost::make_transform_iterator( v.begin(), lambda ),
transform_end, "c" ) != transform_end;
如果您的内部 lambda 是在任何位置找到 "c"
,我不会在这里使用转换迭代器,因为我们想在每个内部 vector 上返回 true/false,而不仅仅是一些转换后的值, 我们将在外部 vector 上使用 find_if 并在内部 vector 上找到
std::string val = "c";
auto lambda = [ const & ]( std::vector< std::string > const& vInner )
{ return std::find( vInner.begin(), vInner.end(), val ) != v.end(); } ;
return std::find_if( v.begin(), v.end(), lambda );
关于c++ - 在 vector<vector<string>> 中查找一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25684085/