有效搜索排序的字符串向量

时间:2018-01-21 20:25:05

标签: c++ search stdvector

我有很长的字符串向量。例如:

std::string data;
data.push_back("abc");
data.push_back("bcd");
//...
data.push_back("zze");
data.push_back("zzz");

向量中的字符串按字母顺序排序。

我知道我可以使用std::find来查找std::vector中字符串的存在和位置。但由于我的矢量按字母顺序排序,是否有一种易于实现且更有效的方法来检查矢量中是否存在值?

1 个答案:

答案 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
}