C++ 在vector中查找特定字符串的最佳方法是什么?
比如说。我有一些结构:C++ 在vector中查找特定字符串的最佳方法是什么?,c++,string,stl,vector,C++,String,Stl,Vector,比如说。我有一些结构: s_Some{ std::string lable; s_some_junk some_junk; }; 和一个向量: std::vector<s_Some> mSome; std::vector mSome; 然后我用很多s_-Somes填充这个向量 我需要在这个向量中找到一个迭代器,它有一个特定的标签。到目前为止,我只是重复了所有这些垃圾,并将每个标签与想要的标签进行匹配。我觉得这有点愚蠢。有更好的方法吗?如果你只想搜索几次,或者如果你的向量
s_Some{
std::string lable;
s_some_junk some_junk;
};
和一个向量:
std::vector<s_Some> mSome;
std::vector mSome;
然后我用很多s_-Somes填充这个向量
我需要在这个向量中找到一个迭代器,它有一个特定的标签。到目前为止,我只是重复了所有这些垃圾,并将每个标签与想要的标签进行匹配。我觉得这有点愚蠢。有更好的方法吗?如果你只想搜索几次,或者如果你的向量每次搜索都可能有不同的内容,很遗憾,没有其他选择;你必须遍历整个向量 但是,如果向量创建后不会更改,并且必须运行大量搜索,请执行以下操作:
我刚刚注意到,您说您希望将每个标签与正在查找的标签进行匹配。所以我的结论是你可以有重复的标签。然后,对于第2点,使用相应的多映射容器,而对于第1点,事情会变得更混乱。您可以找到执行此操作的算法。定义一个谓词,如下所示:
struct isEqual
{
isEqual(const std::string& s): m_s(s)
{}
bool operator()(S_Some& l)
{
return l.lable == m_s;
}
std::string m_s;
};
在搜索时,您可以使用
std::vector<S_Some>::iterator iter = std::find_if(mSome.begin(),
mSome.end(),
isEqual(std::string("AAAA"));
std::vector::iterator iter=std::find_if(mSome.begin(),
mSome.end(),
isEqual(标准::字符串(“AAAA”);
使用
std::multimap< string, s_Some > mSome;
找到所需标签值的第一个实例
mSome.find( lable_you_want );
下一个实例将通过递增迭代器找到
比照
也就是说,除非您需要使用std::vector。但这只是编写for循环的一种更好的方法。复杂性仍然是线性的,没有任何改进。STL find_if将只从开始到匹配/结束遍历向量。是的,我想(从问题标题)他希望避免自己写循环。可能我没有正确理解这个问题,我认为我们必须使用vectorRight,两种解释似乎都是合理的;)现在,当我从性能角度再次阅读时,我看到了这样一句话:“这在我看来有点愚蠢。有更好的方法吗?”以完全不同的方式。。
mSome.find( lable_you_want );