您的位置:首页 > 编程语言 > C语言/C++

map双键-值对及特殊键值对

2016-07-28 11:15 323 查看
想着python里面的字典是多么的优美,然后想想c++里面要实现一个双键-值对,可以用来取代二维数组(没什么必要。。。)或者是一些具有不同类型横纵坐标的表。

my[make_pair(2, 2)]这个重载了[ ]操作符,如果键不存在则会先插入一个键为(2,2)的对象,然后将值赋为0。慎用!

可以用count函数来查看该键是否已经存在。存在为1,不存在为0。

#include <cstdio>
#include <map>
using namespace std;

int main(){
map<pair<int, int>, int> my;
printf("%d\n", my.size());
my.insert( make_pair( make_pair(1, 2), 3) );
printf("%d\n", my.size());
printf("value count %d\n", my.count(make_pair(2,2)));
return 0;
}


用char*作key

由于char*仅仅是一个指针,只存储了字符串内存的首地址,如果直接用一个char*来作为key,则变成了地址作为key而不是对应的字符串作为key,一个简单的方法就是利用string的构造函数将char*转成string对象。

#include <cstdlib>
#include <string>
#include <map>
#include <cstdio>
using namespace std;

char *name, *number;
map<string, char*> phoneBook;
//insert a new element
name = (char*)malloc(21);
number = (char*)malloc(21);
scanf("%s%s", name, number); //name and number separated by a space
phoneBook.insert(make_pair(name, number));
//query
scanf("%s", name);
if(phoneBook.find(name) == phoneBook.end()){
printf("Not found\n");
}else{
printf("%s=%s\n", name, phoneBook[name]);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ map