在C+中是否有用于二进制搜索的库+; < C++中有没有预先实现的库,用于像二进制搜索一样快速搜索?普通列表是否支持任何类型的查找功能?或者存在类似的函数

在C+中是否有用于二进制搜索的库+; < C++中有没有预先实现的库,用于像二进制搜索一样快速搜索?普通列表是否支持任何类型的查找功能?或者存在类似的函数,c++,search,C++,Search,我有一个对象列表,我想将它们存储在一个列表中,但不是重复的元素。我想知道新的元素是否存在于列表中并做适当的动作。 < p>我相信你正在寻找C++。它包含一个名为的函数 页面上提供了一个示例,并在此处重复: // binary_search example #include <iostream> // std::cout #include <algorithm> // std::binary_search, std::sort #include <vec

我有一个对象列表,我想将它们存储在一个列表中,但不是重复的元素。我想知道新的元素是否存在于列表中并做适当的动作。

< p>我相信你正在寻找C++。它包含一个名为的函数

页面上提供了一个示例,并在此处重复:

// binary_search example
#include <iostream>     // std::cout
#include <algorithm>    // std::binary_search, std::sort
#include <vector>       // std::vector

bool myfunction (int i,int j) { return (i<j); }

int main () {
  int myints[] = {1,2,3,4,5,4,3,2,1};
  std::vector<int> v(myints,myints+9);                         // 1 2 3 4 5 4 3 2 1

  // using default comparison:
  std::sort (v.begin(), v.end());

  std::cout << "looking for a 3... ";
  if (std::binary_search (v.begin(), v.end(), 3))
    std::cout << "found!\n"; else std::cout << "not found.\n";

  // using myfunction as comp:
  std::sort (v.begin(), v.end(), myfunction);

  std::cout << "looking for a 6... ";
  if (std::binary_search (v.begin(), v.end(), 6, myfunction))
    std::cout << "found!\n"; else std::cout << "not found.\n";

  return 0;
}
//二进制搜索示例
#include//std::cout
#包括//标准::二进制搜索,标准::排序
#include//std::vector

BoOL MyFalm(int i,int j){返回(i<p>),我相信您正在寻找C++。它包含一个名为

的函数。 页面上提供了一个示例,并在此处重复:

// binary_search example
#include <iostream>     // std::cout
#include <algorithm>    // std::binary_search, std::sort
#include <vector>       // std::vector

bool myfunction (int i,int j) { return (i<j); }

int main () {
  int myints[] = {1,2,3,4,5,4,3,2,1};
  std::vector<int> v(myints,myints+9);                         // 1 2 3 4 5 4 3 2 1

  // using default comparison:
  std::sort (v.begin(), v.end());

  std::cout << "looking for a 3... ";
  if (std::binary_search (v.begin(), v.end(), 3))
    std::cout << "found!\n"; else std::cout << "not found.\n";

  // using myfunction as comp:
  std::sort (v.begin(), v.end(), myfunction);

  std::cout << "looking for a 6... ";
  if (std::binary_search (v.begin(), v.end(), 6, myfunction))
    std::cout << "found!\n"; else std::cout << "not found.\n";

  return 0;
}
//二进制搜索示例
#include//std::cout
#包括//标准::二进制搜索,标准::排序
#include//std::vector

BoOL MyFalm(int i,int j){返回(i<p):如果您正在编写真实的C++代码,可以使用算法标准库。< /P> 其中有一个参数,允许您查找在指定为参数的元素范围之间定义的特定元素


你可以在同一页面中找到一个真实的例子。

如果你写的是真正的C++代码,你可以使用算法标准库。< /P> 其中有一个参数,允许您查找在指定为参数的元素范围之间定义的特定元素


你可以在同一页中找到一个真实的例子。

有一个
std::lower_bound()
,它使用
O(logn)
比较在任何双向序列中找到一个合适的位置。由于链表不支持随机访问,所以遍历是
O(n)
。你可以使用
std::binary\u search()
如果您只对是否存在合适的对象感兴趣,但如果您对定位对象感兴趣,则此算法没有用处。当然,
std::lower_bound()
std::binary_search()
的先决条件是序列已排序。

存在
std::lower_bound()
使用
O(logn)
比较在任何双向序列中找到合适的位置。由于链表不支持随机访问,因此遍历是
O(n)
。您可以使用
std::binary\u search()
如果您只对是否存在合适的对象感兴趣,但如果您对定位对象感兴趣,则此算法没有用处。当然,
std::lower_bound()
std::binary_search()的先决条件
是对序列进行排序。

容器列表不用于元素的排序存储和直接访问。虽然标准类
std::list
具有成员函数
sort
,但是使用双向迭代器的搜索(
std::list
具有双向迭代器)代替随机访问的迭代器不是很有效

最好使用一些关联容器,例如
std::map
std::set
(如果需要唯一的元素)或
std::multimap
std::multiset
(如果元素可以被复制)


如果元素的顺序不重要,那么您可以使用一些标准的无序容器,如
std::unordered\u map
std::unordered\u set
容器列表不用于元素的顺序存储和直接访问。虽然标准类
std::list
具有成员函数
sort
然而,使用双向迭代器(
std::list
具有双向迭代器)而不是随机访问迭代器的搜索不是非常有效

最好使用一些关联容器,例如
std::map
std::set
(如果需要唯一的元素)或
std::multimap
std::multiset
(如果元素可以被复制)


如果元素的顺序不重要,那么您可以使用一些标准的无序容器,如
std::unordered_-map
std::unordered_-set

另请参见
std::equal_-range
std::lower_-bound
std::upper-bound
。如果您使用实际需要查找和使用元素。另请参见
std::equal_range
std::lower_bound
std::upper_bound
。如果您确实想要查找和使用元素,这些可能比
std::binary_search
更有用。您确定二进制搜索列表是个好主意吗?是什么阻止了您这样做阅读C++标准库中的C++标准容器和算法的信息?只需半天就能熟悉可用的选项。你确定二进制搜索列表会是个好主意吗?是什么阻止你阅读C++标准容器和ALG的信息?你最喜欢的C++标准库引用中的算法?只需要半天就能熟悉可用的选项。我有一个对象列表,我想把它们存储在一个列表中,但不可以重复元素。我想知道新元素是否存在于列表中并做适当的动作。例如,在C语言中,它可以很容易地实现。可以使用所有列表都有的exist方法。如果您不希望有重复项,则需要一个集合。这将授予您轻松使用二进制搜索的权限,因为它已排序。我有一个对象列表,我希望将它们存储在列表中,但不想存储在重复的元素中。我希望注意列表中是否存在新元素,并执行适当的操作例如,在c#中,它可以通过所有列表都有的exist方法轻松实现。如果您不想有重复项,则需要一个集合。这将授予您EasyBuse