本篇 自定义对象:Rect里的成员变量都是基础数据类型。
下篇 C++-STL(9)-unordered_map-自定义类型(2)-实例源码 成员变量是自定义对象
基础数据类型、自定义对象类型相比:
1.定义:unordered_map<Rect, Rect_hash,int> rectmap;
unordered_map<string,int> imap;
2.访问:
unordered_map<Rect, Rect_hash,int>::iterator iter; iter->first.name
unordered_map<string,int>::iterator iter; iter->first
以下是unordered_map 自定义类型增删改查代码实例:
1.class Rect{};
class Rect {
public:
int width;
int height;
string name;
Rect(int a, int b, string str)
{
width = a;
height = b;
name = str;
}
bool operator==(const Rect& rc) const
{
return name == rc.name && width == rc.width && height==rc.height;
}
};
2.class Rect_hash{};
class Rect_hash
{
public:
size_t operator()(const Rect& rc)const
{
return hash<string>()(rc.name) ^ hash<int>()(rc.width) ^ hash<int>()(rc.height);
}
};
3.hashmap_rect()调用
void hashmap_rect()
{
cout << "hashmap_rect*******************" << endl;
//1.定义 unordered_map < Rect,int,Rect_hash> rectmap;
//2.插入insert pair<,> make_pair(Rect(0, 300, "a"), 300));
//3.得到大小 int nSize = rectmap.size();
//4.查找 iter=rectmap.find() 输入key 返回iter
//5.删除 int n=rectmap.erase(key) 返1 成功;返0 不成功
//6.删除全部 rectmap.erase(rectmap.begin(), rectmap.end());
//7.修改rectmap['d']=4000;
cout << "1定义 unordered_map<Rect, Rect_hash,int> rectmap;" << endl;
cout << " 2插入insert pair<,>" << endl;
unordered_map <Rect, int,Rect_hash> rectmap;
rectmap.insert(make_pair(Rect(0, 300, "a"), 300));
rectmap.insert(pair<Rect, int>(Rect(1, 200, "z"), 200));
rectmap.insert(pair<Rect, int>(Rect(2, 300, "b"), 300));
rectmap.insert(pair<Rect, int>(Rect(3, 7, "d"), 7));
rectmap.insert(pair<Rect, int>(Rect(4, 500, "f"), 500));
for (auto iter = rectmap.begin(); iter != rectmap.end(); ++iter)
{
cout << "first.name=" << iter->first.name << "first.width=" << iter->first.width << "first.heigh=" << iter->first.height << endl;
}
cout << " 3得到大小 int nSize = rectmap.size();" << endl;
int nSize = rectmap.size();
cout << nSize << endl;
cout << "4.查找 iter=rectmap.find(b) 输入key 返回iter Rect rect1 = Rect(2, 300, 'b'); " << endl;
unordered_map<Rect, int, Rect_hash>::iterator iter;
Rect rect1 = Rect(2, 300, "b");
iter = rectmap.find(rect1);
cout << "first.name=" << iter->first.name << "first.width=" << iter->first.width << "first.heigh=" << iter->first.height << endl;
cout << "5.删除 int n=rectmap.erase(key) 返1 成功;返0 不成功 iter Rect rect2 = Rect(1, 200, 'z')" << endl;
Rect rect2 = Rect(1, 200, "z");
int n = rectmap.erase(rect2);
cout << "删除后的返回值=" << n << endl;
for (iter = rectmap.begin(); iter != rectmap.end(); iter++)
{
cout << "first.name=" << iter->first.name << "first.width=" << iter->first.width << "first.heigh=" << iter->first.height << endl;
}
cout << "6.修改rectmap[rect1]=4000; rect1 = Rect(2, 300, 'b')" << endl;
rectmap[rect1] = 4000;
cout << rectmap[rect1] << endl;
cout << "7.删除全部 rectmap.erase(rectmap.begin(), rectmap.end());" << endl;
rectmap.erase(rectmap.begin(), rectmap.end());
nSize = rectmap.size();
cout << "删除全部后map的长度" << nSize << endl;
}
原文链接: https://www.cnblogs.com/jasmineTang/p/14369296.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;
也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/327669
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!