在C+中是否有用于二进制搜索的库+; < C++中有没有预先实现的库,用于像二进制搜索一样快速搜索?普通列表是否支持任何类型的查找功能?或者存在类似的函数
我有一个对象列表,我想将它们存储在一个列表中,但不是重复的元素。我想知道新的元素是否存在于列表中并做适当的动作。 < p>我相信你正在寻找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
// 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