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

来源:互联网 发布:mac三国志13修改器 编辑:程序博客网 时间:2024/06/04 20:09

想着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 elementname = (char*)malloc(21);number = (char*)malloc(21);scanf("%s%s", name, number); //name and number separated by a spacephoneBook.insert(make_pair(name, number));//queryscanf("%s", name);if(phoneBook.find(name) == phoneBook.end()){    printf("Not found\n");}else{    printf("%s=%s\n", name, phoneBook[name]);}
0 0
原创粉丝点击