starnet 阅读(1017) 评论(9)

()关联容器使用参考

Map的使用:

Map的关键所在就是通过关键码获取对应数据,这一点有点像数组,只不过map支持非整数索引的数组,比如可以这样访问数组元素:

#include "stdafx.h"

#include <map>

#include <iostream>

 

using namespace std;

 

int main(int argc, char* argv[])

{

       map<char*,char*> student;

       student["张三"] = "中国北京xxxx";//相当于student.insert()操作

       student["李四"] = "中国香港xxxx";

       student["约翰"] = "英国伦敦xxxx";

 

    cout << student.size() <<endl;

 

       map<char*,char*>::iterator it;

       for(it = student.begin(); it != student.end(); it++)

       {

              cout <<  student[it->first] <<endl;

       }

 

 

       return 0;

}

 

/*<控制台输出结果>

中国北京xxxx

中国香港xxxx*/

英国伦敦xxxx

Press any key to continue

*/

姑且不论示例用法的合理性(编译能通过,但跳出很多警告,不知道啥原因),从这个用法我想可以体会map的最主要特征。当然map支持很多其他的操作,比如find,insert等常见操作。Map主要就是通过关键码取得对应的数据。


评论列表
yqever
re: (四)关联容器使用参考
没必要用student[it->first],影响效率. 
这样即可:

for(it = student.begin(); it != student.end(); it++)

       {

              cout << it->second  <<endl;

       }
周星星
re: (四)关联容器使用参考
map<char*,char*> 不对吧?你这里全是静态常量所以看不出来。
有两个问题,1。它们指向的字符串是不是能保证生存期 2。是字符串比较,还是指针比较
blog of vc_stude
好像没问题
生存期好像不是问题;
测试结果应该是指针比较,如果是指针比较应该就没问题,,可比较,也可排序;

#include "stdafx.h"
#include <map>
#include <iostream>

using namespace std;

int main(int argc, char* argv[])
{

map<char*,char*> student;

{
char name1[] = "张三";
char addr1[] = "中国北京xx路xx号";

student[name1] = addr1;
student["李四"] = "中国香港xx路xx号";
student["约翰"] = "英国伦敦xx路xx号";
int i;
}

//i = strlen(name1); i and name1:undeclared identifier

cout << student.size() <<endl;

map<char*,char*>::iterator it;
for(it = student.begin(); it != student.end(); it++)
{
cout << student[it->first] << endl;
cout << it->second << endl;
}

return 0;
}

/*
控制台输出

中国北京xx路xx号
中国北京xx路xx号
中国香港xx路xx号
中国香港xx路xx号
英国伦敦xx路xx号
英国伦敦xx路xx号
Press any key to continue
*/
yqever
re: (四)关联容器使用参考
“不能保证生存期”!
你这样的测试没什么意义。就如同
char* GetName()
{
    char name1[] = "张三"; 
    return name;
}

在有的编译器下有时候也能得到你想要的字符串,但是这不能代表着就是正确的。无论如何,不应该写出这样的代码。
vc_student
的确是
map的【】操作符只是拷贝了一个指针,这样就看出来了!

map<char*,char*> student;

{
char name[] = "张三";
student[name] = "北京";

memset(name,0,sizeof(name));
cout << "name is:" << name << endl;
}

map<char*,char*>::iterator it;
for(it = student.begin(); it != student.end(); it++)
{
cout <<  it->first <<  ":" <<  it->second << endl;
}

Diviner
re: (四)关联容器使用参考
是指针比较,有问题。
生存期倒没问题,这里写的是char *,其实是const char *
sanqing
re: (四)关联容器使用参考
诚招VC程序员参与计算机书籍出版
优厚的稿酬,诚招VC技术人员参与各种技术书籍出版。
通过该书籍,作者可以得到如下报酬:
1、丰厚的稿酬。
2、书籍著作的署名权。
3、对作者和书进行宣传,提高作者在技术圈子里的名气。
可异地兼职,如果您有这方面的兴趣和能力,请与我联系。

Email:sanqing_123@126.com
QQ:326098670
blog of vc_stude
指针可比较 有问题吗?
指针就是比较内存地址,地址是唯一的,那么就应该可比较,也可作为map的键,满足其内部排序的需要!

发表评论
切换编辑模式