请教个multimap容器的基础问题

blueboy82006 2012-02-29 08:46:38

multimap和map默认都是以 键值 的 < 操作进行排序插入的。
下述代码本意是让key值按字符串比较大小,再插入相应的结点。



multimap<char*,int> testmap;

char s1[10]="de3456789";
char s2[5]="abcd";
char* p=s1;

testmap.insert(make_pair(s1,12));
testmap.insert(make_pair(s2,17));
testmap.insert(make_pair(p,8));



(问题1:)但实际是比较了字符串地址的大小了吧?因为multimap<char*,int>的key是一个字符指针。不知道是不是这样子?

另外,如果是下面这样:



multimap<string,int> testmap;

char s1[10]="de3456789";
char s2[5]="abcd";

string str1(s1),str2(s2);
testmap.insert(make_pair(str1,12));
testmap.insert(make_pair(str2,17));




(问题2:)容器是否是按string值来进行 < 的比较,再insert?

(问题3:)这种情况testmap需要格外开辟空间来存放string值吗?还是直接string的地址空间?


谢谢~
...全文
81 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
blueboy82006 2012-02-29
  • 打赏
  • 举报
回复
ok, 自己实现了,分享一个。
由于考虑string拷贝的问题。我这里只能用char*
自己实现了一下比较函数。

struct ltstr
{
bool operator()(const char* s1, const char* s2) const
{
return strcmp(s1, s2) < 0;
}
};

multimap<const char*, int, ltstr> testmap;


blueboy82006 2012-02-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 pengzhixi 的回复:]

string是深拷贝构造函数那么就是深拷贝
[/Quote]

多谢,
能否给个key为 char*版本的multimap,同时自己定义一下采用 < 比较字符串的函数?
pengzhixi 2012-02-29
  • 打赏
  • 举报
回复
string是深拷贝构造函数那么就是深拷贝
blueboy82006 2012-02-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pengzhixi 的回复:]

3.是会拷贝一份的!
[/Quote]

是深拷贝还是浅拷贝?我想搞清楚是直接利用了原来的地址空间呢,还是开辟新空间,构造新的string,再把原string的内容复制过来。

这两种情况,显示效率有很大区别。
pengzhixi 2012-02-29
  • 打赏
  • 举报
回复
1.是的 是按照地址大小比较的。

2.当然能

3.是会拷贝一份的!

64,670

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧