我有很长的字符串向量。例如:
std::string data;
data.push_back("abc");
data.push_back("bcd");
//...
data.push_back("zze");
data.push_back("zzz");
向量中的字符串按字母顺序排序。
我知道我可以使用std::find
来查找std::vector
中字符串的存在和位置。但由于我的矢量按字母顺序排序,是否有一种易于实现且更有效的方法来检查矢量中是否存在值?
答案 0 :(得分:3)
如果容器已排序,您可以使用std::binary_search:
检查等效于值的元素是否出现在[first,last]范围内。
std::string some_value = "xyz";
const auto found =
std::binary_search(std::cbegin(data), std::cend(data), some_value);
found
如果找到true
则为some_value
,而在另一种情况下为false
。
如果您有兴趣获得指向您正在寻找的元素的迭代器,请考虑使用std::lower_bound:
const auto it =
std::binary_search(std::cbegin(data), std::cend(data), some_value);
if (it != std::cend(data)) {
// element is found, it points to this element
}