我一直在使用std::vector
但它变得笨拙,因为它迭代的数据已经增长,我希望能够在它们变得多余时过滤掉随机元素。我在std::list
的其他地方有这种行为,但无法让binary_search
与之相提并论。
我是否可以使用一些代码让binary_search
再次使用,或者我是否必须使用更复杂的容器和语法?
if(binary_search(iter + 1, myLines.end(), line)) {
firstFound.assign(line);
if (numFinds++) break;
}
答案 0 :(得分:6)
std::set
的查找为O(log(N))
,与binary_search
完全相同,如果您有迭代器,则删除为O(1)
,{{1}如果你没有(查找+删除)。虽然集合将存储已排序的元素,但这对您来说一定没问题,因为O(log(N))
也仅适用于已排序的范围。
答案 1 :(得分:0)
听起来你正在寻找的是binary search tree (BST)。
它通常允许二进制搜索(毕竟它在名称中),删除相对简单。
存在多种二叉搜索树。一些常见的:
std::set
而选择它的原因(见Armen Tsirunyan's answer)。哪一种最适合您,取决于您的具体用例。