c++ - 在所有节点作为结构 C++ 的排序列表中进行二进制搜索

标签 c++ list stl binary-search

我有一个列表,其中包含所有元素作为表单结构

typedef struct person_node{
    string name;
    string country;
}person;

std::list<person> list;

列表已经按人名排序

如何使用内置的 binary_search() 函数?

我已经知道如何在只有数字作为数据的列表中使用此 binary_search(),但我想知道如何将它用于这样的列表。

我将这个二进制函数用作:

binary_search (list.begin(), list.end(), value, compare_function);

我唯一不知道的是,“如果我需要在列表中查找特定名称,我应该输入什么来代替?”

此外,我希望一个迭代器指向该节点(如果找到的话)。

最佳答案

您输入一个 person包含 name你想找到。

另请注意 binary_search很少有用(它只告诉你该项目是否存在,而不是它在集合中的位置。它在 std::list 上是双重无用的,因为它需要随机访问迭代器才能很好地工作(std::list不提供)。

所以,您可能想要的是 std::vector<person>std::deque<person> ,您可能希望使用 std::lower_bound 进行搜索或 std::upper_bound . std::lower_boundstd::upper_bound每个人都会返回一个指向他们找到的项目的迭代器,让您可以访问该对象。

关于c++ - 在所有节点作为结构 C++ 的排序列表中进行二进制搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14320395/

相关文章:

python - list.append(obj) 导致回溯 - 这是为什么?

c++ - 错误的 std::vector 构造函数

c++ - 对std::vector的emplace_back感到困惑

c++ - 为什么显式调用析构函数不会破坏我的对象?

c++ - Visual Studio 可以通过 "Go To Definition"找到标识符的定义,但编译器会抛出 "identifier not found"(CS3861)

list - 如何创建一个包含 n 个过程应用程序的列表

python - 计算 N Queens 函数产生的解的数量。

c++ - 将 boost::any 实例转换为其真实类型

c++ - C++11 有一些可移植且有效的方法来从嵌套类访问封闭类吗?

c++ - 在 STL 算法中使用结构成员