我的意思是 - 我们知道这些std::map元素是根据键排序的.所以,让我们说键是整数.如果我从迭代std::map::begin()来std::map::end()使用for,不标准的保证,我会通过与键的元素,按升序排序结果迭代?
例:
std::map<int, int> map_;
map_[1] = 2;
map_[2] = 3;
map_[3] = 4;
for( std::map<int, int>::iterator iter = map_.begin();
iter != map_.end();
++iter )
{
std::cout << iter->second;
}
Run Code Online (Sandbox Code Playgroud)
这是保证打印234还是实现定义?
现实生活中的原因:我有一个std::map带int钥匙.在非常罕见的情况下,我想用键来迭代所有元素,而不是具体的int值.是的,听起来似乎std::vector是更好的选择,但请注意我的"非常罕见的情况".
编辑:我知道,元素std::map是排序的..没有必要指出它(这里的大多数答案).我甚至在我的问题中写过它.
我在迭代容器时询问迭代器和顺序.谢谢@Kerrek SB的答案.
C++ 0x正在引入unordered_set,可以在boost许多其他地方使用.我理解的是unordered_set具有O(1)查找复杂性的哈希表.另一方面,set只是具有log(n)查找复杂性的树.为什么人们会使用set而不是unordered_set?即是否需要set了?
我有一个std::set<int>,找到这个集合中最大的int的正确方法是什么?
我想知道如何在C++中实现一个集合.如果我在不使用STL提供的容器的情况下实现自己的set容器,那么最好的方法是什么呢?
我理解STL集基于二叉搜索树的抽象数据结构.那么底层数据结构是什么?数组?
另外,如何insert()为一组工作?set如何检查元素是否已经存在?
我在维基百科上读到,实现集合的另一种方法是使用哈希表.这怎么样?
从cplusplus.com参考,它似乎std::set排序元素.
我需要排序字符串,但我不确定它是否适用于每个平台和编译器.主要是GCC,MinGW,VC.
我需要有一组有序的值而不重复.那么,什么是快速/最佳方法:
1 - 创建一个向量,对其进行排序并删除重复项?2 - 使用一种"排序"向量(如果存在)?
哪一个可以更有效?
c++ ×6
stl ×4
set ×2
std ×2
algorithm ×1
c++11 ×1
collections ×1
dictionary ×1
duplicates ×1
sorting ×1
standards ×1
stdset ×1