读书人

地图lt;string, stringgt;的存储有关问题

发布时间: 2013-01-20 10:22:40 作者: rapoo

map<string, string>的存储问题,高手来!!!
小弟在vc6.0下进行编程在进行文件读取是比如
a A
b B
d D
c C
插入到map容器中时,使用map<string, string>::iterator iter = **.begin();进行输出时出现问题
while(iter != **.end())
{
cout << iter->first << iter->second;
}
输出结果为:
a A
b B
c C
d D
跟原先书上说的map的元素是按顺序存储的有点相悖!!!这是一个什么情况?? c++? map容器 存储顺序 string
[解决办法]
按顺序是按顺序,可是是按什么顺序呢?
这就是个问题了。
所以STL对各种常见的数据类型都有一些默认的排序规则,而默认情况下,map就使用这些排序规则来储存数据。当然你要愿意也可以用别的排序规则,map允许你这么做。
在你的例子里,我觉得你是预期map会按照你的读入顺序排序字符串。但这不是STL预设的string的默认排序规则。默认排序规则是按照字符串值从小到大排列的。
[解决办法]
std::map 本来就是排序的。
std::map is a sorted associative container that contains key-value pairs with unique keys.

template<
class Key,
class T,
class Compare = std::less<Key>,
class Allocator = std::allocator<std::pair<const Key, T> >
> class map;
[解决办法]
楼主"按顺序"理解错了

按顺序是第3个参数,如果你没写就是std::less<Key>,默认升序
[解决办法]
map的内部结构式RB树(红黑树),内部实现了排序插入。

读书人网 >C++

热点推荐