Merits of std::find
Merits of std::find
与容器的find
方法相比,使用C++11的std::find
有什么优势吗?
-
在
std::vector
(没有find
方法)的情况下,std::find
是否使用了一些智能算法或简单地迭代每个元素的天真方法? -
在
std::map
的情况下,似乎需要传递一个std::pair
,它是std::map
的value_type
。这似乎不是很有用,因为您通常希望为键或映射元素找到它。 -
其他容器如
std::list
、std::set
或std::unordered_set
呢?
在std::vector(没有find方法)的情况下,std::find是否使用了一些聪明的算法或简单地迭代每个元素的天真方法?
它不能,因为矢量没有排序。除了具有O(n)复杂度的线性搜索之外,没有其他方法可以在未排序的向量中找到元素。
另一方面,序列容器不提供find()
成员函数,因此您不可能使用它。
在std::map的情况下,似乎需要传递一个std::pair,它是std::map的value_type。这似乎不是很有用,因为您通常希望为键或映射元素找到它。
实际上,这里应该使用find()
成员函数,它保证了更好的复杂性(O(logN))。
通常,当容器公开与泛型算法同名的成员函数时,这是因为成员函数做同样的事情,但提供了更好的复杂性保证。
其他容器(如std::list、std::set或std::unordered_set)呢?
就像std::vector
一样,std::list
不是一个已排序的容器,所以同样的结论也适用。
对于std::set
和std::unordered_set
,您应该使用find()
成员函数,它可以保证更好的复杂性(分别为O(logn)和平均值O(1))。
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 在 QVector<std::unique_ptr 上使用 std::find<Type>>
- std::find,返回所有找到的值的替代方法,而不仅仅是存在重复的向量的第一个值
- 为什么在向量上使用 std::find() 时会出现错误?
- 使用 std::find 时没有匹配的函数调用错误
- std::set<Key,Compare,Allocator>::find() 函数使用"<"运算符而不是"=="运算符背后的直觉是什么?
- STL std::find() C++
- 如何将 std::find() 与 2d std: 数组一起使用?
- 为什么 std::find( s.begin(), s.end(), val ) 比集合 s 的 s.find(val) 慢 1000 倍<int>?
- 如果迭代器没有因插入而无效,则使用std::find和C::insert()是线程安全的
- 未按值排序的std::find和std::any_of
- 为什么std::map有find成员函数
- 在libc++和libstdc++之间的std::map上使用std::find时的实现差异
- 有没有办法在Cython中导入std::find find_if等?
- std::map::find 的效率是否与值的数据大小有关?
- std::string::find 为取消引用的迭代器和等效字符串文本返回不同的值
- 使用 find() 通过 std::set 的迭代器将不起作用。出了什么问题?
- Android-NDK 的 GGC/C++ 对于 std::string::find/std::getline(...) 来说似乎不稳定
- MinGW g++ cannot find std::stof
- 如何将std::find/std::find_if用于自定义类对象的向量