【发布时间】:2013-01-14 23:23:13
【问题描述】:
我有一个包含所有元素的列表作为表单结构
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);
唯一我不知道的是,“如果我需要在列表中查找特定名称,我应该输入什么来代替 value?”
我还希望 一个迭代器 指向该节点(如果找到)。
【问题讨论】:
-
您正在搜索的值。由于您没有解释您要搜索的内容,我不确定我们还能告诉您什么。
-
你应该输入正确初始化的
person_node;person_node Temp; Temp.name = "r20rock"; binary_search(l.begin(), l.end(), Temp, comp); -
对 list 的二分搜索没有什么意义(只有与遍历成本相比,键的比较非常昂贵时才有意义清单,我怀疑是这种情况)。找到分裂点的成本与列表的大小成线性关系,并且需要访问所有先前的节点。
-
@DavidRodríguez-dribeas 好的,如果我同意为此使用 vector,我将如何获得我正在寻找的节点的位置?
-
@r20rock:如果你使用
vector,那么这个问题更有意义,你可以使用 Jerry Coffin 在他的回答中提到的方法(std::lower_bound或std::upper_bound)
标签: c++ list stl binary-search