控制地图中元素的顺序
Control the order of elements in map
我创建了一个映射:
map<string, string> cuts;
cuts["cutb"] = "a>1";
cuts["cuta"] = "b>3";
cuts["cutc"] = "c<5";
当我用map<string, string>::iterator itr = cuts.begin();
迭代这个地图时,它按字母顺序排列:cuta、cutb、cutc等。
我如何强制迭代器遵循我定义元素的顺序,即cutb、cuta、cutc?
您需要使用数据结构的其他实现。在您的情况下,红黑树实现对您没有帮助。
从更一般的角度来看:如果按照添加顺序遍历条目,为什么需要创建映射?成对的列表/数组/向量对你来说不够吗?
编辑:提示:无论何时选择使用特定的数据结构,都要问问自己需要它支持哪些操作。回答后,你应该能够更准确地选择。如果您需要按键查找、按键插入并检查某个键是否存在,映射是很好的。然而,在优化这些操作的实现中,您将付出的代价通常是丢失元素的插入顺序。
EDIT2:循环浏览配对列表:
// pair is class in namespace std
vector<pair<string, string> > v;
v.push_back(make_pair("cutb", "a>1"));
v.push_back(make_pair("cuta", "b>3"));
v.push_back(make_pair("cutc", "c<5"));
for (int i = 0; i < v.size(); i++) {
// the first element of the pair is addressed with .first; the second - .second
cout << "For key " << v[i].first << " the value is " << v[i].second << endl;
}
向量中的迭代也可以使用迭代器来完成,但我更喜欢索引方法,因为它同样优化,但更容易理解。
你不能(或者如果可以,你就不应该)。如果您需要保留订单,则需要另一个数据结构。尝试STL的vector
http://www.cplusplus.com/reference/vector/vector/
好的,这会更可读一点:
typedef std::pair<std::string, std::string> item;
std::vector<item> vec;
vec.push_back(item("hello", "world"));
vec.push_back(item("abc", "efg"));
for (size_t i = 0; i < vec.size(); ++i) {
std::cout << vec.at(i).first << " " << vec.at(i).second << std::endl;
}
相关文章:
- 为什么用户定义的函数不按照给定的顺序对相同长度的元素进行排序?
- 快速排序 - 三个中位数枢轴选择 - 某些元素顺序不正确
- 序列容器 - 只能按顺序访问元素
- 如何检查 2 个 c++ 数组在 O(1) 或 O(log n) 时间复杂度中是否相同(所有元素都相同,顺序很重要)?
- 保留从一个多集复制到另一个多集的元素的顺序
- 如何在 C++ 中将从文本文件中读取的元素推送和弹出到数组中,并按 Revserse 顺序输出堆栈?
- 查找数组的第一个和最后一个索引,其中 from 和 to 元素的顺序总和最大
- 编写一个递归功能,该功能采用数组并以相反顺序显示元素,而无需在末尾启动数组的索引
- 编写链接函数的更短/更有效的方法,该函数按字典顺序添加新元素
- stable_sort不遵守元素的顺序
- 从容器中获取随机元素,该容器在恒定时间内没有严格的元素顺序
- 如何在默认和二维数组中找到顺序扩大元素的位置
- 多重映射是否保证广告顺序与其初始值设定项中给出的元素顺序匹配
- 调用std::nth_element后第n个元素之前的元素顺序
- 控制地图中元素的顺序
- 指针集中元素的顺序
- 一种按排序顺序保持元素的数据结构,支持快速插入和计算连续元素之间的最大差异
- 双向循环列表中的赋值运算符以错误的顺序添加元素
- 更改STL多集中两个相等元素的顺序
- 初始值设定项列表中元素的求值顺序