当前位置: 首页> 房产> 建材 > 今天的重要新闻_腾讯短链接_百度搜图_网上怎么注册公司免费的

今天的重要新闻_腾讯短链接_百度搜图_网上怎么注册公司免费的

时间:2025/7/27 14:51:00来源:https://blog.csdn.net/bliu2_10/article/details/147279946 浏览次数:0次
今天的重要新闻_腾讯短链接_百度搜图_网上怎么注册公司免费的
  • 👋 Hi, I’m liubo
  • 👀 I’m interested in harmony
  • 🌱 I’m currently learning harmony
  • 💞️ I’m looking to collaborate on …
  • 📫 How to reach me …
  • 📇 sssssdsdsdsdsdsdasd
  • 🎃 dsdsdsdsdsddfsgdgasd
  • 🍺 jyukyuiyuiyuigkasd
  • 🍥 fsdfgdsgsdgdgadsa
  • ✨ xcvxcvxcvxcvdasdaasd
  • 🍰 dazdsxasxsaxsaasdsa
  • 🚨 gdfgdshdfhfhygjtyu

unordered_map是存储<key, value>键值对的关联式容器,其允许通过keys快速的索引到与其对应的value。其存储结构为哈希;元素的存储并未按照特定的顺序,而是被组织到桶中,在哪个桶中取决于其散列值。

使用时包含头文件:

#include <unordered_map>

一、unordered_map的构造函数

函数原型:

unordered_map<T1, T2> mp; // 构造一个空容器
unordered_map<T1, T2> mp(n); // 初始桶数量为 n
unordered_map<T1, T2> mp = {{n1, m1},{n2, m2}}; // 列表构造函数
unordered_map<T1, T2> mp2(const unordered_map &mp1); // 拷贝构造一个容器
unordered_map<T1, T2> mp2(mp1.begin(), mp1.end()); // 使用迭代器区间构造一个容器,注意左闭右开
unordered_map<T1, T2> mp2 = move(mp1); // 移动构造函数

使用示例:

#include <stdio.h>  // C语言的标准库,包含C语言流操作 printf等
#include <string.h> // C语言的标准库,包含字符串处理操作 strcpy等
#include <unistd.h> // pause()头文件
#include <iostream> // 包含输入和输出操作
#include <string>
#include <unordered_map>using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::unordered_map;// unordered_map 的遍历
void print_unordered_map(unordered_map<int, string> &mp)
{for (auto e : mp){cout << e.first << ":" << e.second << " ";}cout << endl;
}int main()
{printf("--------------------begain-------------------\n");unordered_map<int, string> first; // 构造一个空容器first = {{1, "apple"}, {2, "banana"}, {3, "orange"}, {4, "pear"}};unordered_map<int, string> second(5);                             // 初始桶数量为 5unordered_map<int, string> third = {{1, "apple"}, {2, "banana"}}; // 列表构造函数unordered_map<int, string> forth(first);                          // 拷贝构造一个容器unordered_map<int, string> fifth(first.begin(), first.end());     // 使用迭代器区间构造一个容器unordered_map<int, string> sixth = move(first);                   // 移动构造函数cout << "first: " << endl;print_unordered_map(first);cout << "second: " << endl;print_unordered_map(second);cout << "third: " << endl;print_unordered_map(third);cout << "forth: " << endl;print_unordered_map(forth);cout << "fifth: " << endl;print_unordered_map(fifth);cout << "sixth: " << endl;print_unordered_map(sixth);cout << "first: " << endl;print_unordered_map(first);printf("--------------------end----------------------\n");// cin.get();// getchar();// pause();return EXIT_SUCCESS;
}

测试结果:

--------------------begain-------------------
first: 
4:pear 3:orange 2:banana 1:apple 
second: third: 
2:banana 1:apple 
forth: 
4:pear 3:orange 2:banana 1:apple 
fifth: 
1:apple 2:banana 3:orange 4:pear 
sixth: 
4:pear 3:orange 2:banana 1:apple 
first: --------------------end----------------------

从结果看打印输出是无序的,同时证明了,在内部,unordered_map没有对<kye, value>按照任何特定的顺序排序。

使用移动构造函数会把原数据清空。

二、unordered_map的遍历

方法1:

void print_unordered_map(unordered_map<int, string> &mp)
{for (unordered_map<int, string>::iterator it = mp.begin(); it != mp.end(); ++it){cout << it->first << ":" << it->second << " ";}cout << endl;
}

迭代器iterator中的begin和end函数是左闭右开的区间。

方法2:

void print_unordered_map(unordered_map<int, string> &mp)
{for (auto e : mp){cout << e.first << ":" << e.second << " ";}cout << endl;
}

三、unordered_map的元素访问

函数原型:

operator[key];  //返回索引 key 所指的值
front();        //返回容器中第一个数据元素
back();         //返回容器中最后一个数据元素

使用示例:

void get_element_test()
{cout << "get_element_test: " << endl;unordered_map<int, string> mp;mp = {{1, "apple"}, {2, "banana"}, {3, "orange"}, {4, "pear"}};cout << 1 << ":" << mp[1] << " " << endl;cout << 2 << ":" << mp[2] << " " << endl;unordered_map<int, string>::iterator it;it = mp.begin();cout << it->first << ":" << it->second << " " << endl;it++;cout << it->first << ":" << it->second << " " << endl;it++;cout << it->first << ":" << it->second << " " << endl;// it = it - 1; // 报错没有减法
}

测试结果:

--------------------begain-------------------
get_element_test: 
1:apple 
2:banana 
4:pear 
3:orange 
2:banana 
--------------------end----------------------

需要注意的是 mp.begin()打印的是 4:pear 并不是 1:apple。 unordered_map<int, string>::iterator it,迭代器并没有减法运算。

四、unordered_map的元素插入

函数原型:

unordered_map<T1, T2> mp;
pair<T1, T2> p(m, n);
mp.insert(p);                  // 1.借助 pair 插入元素
mp.insert(pair<T1, T2>(m, n)); // 2.借助 pair 插入元素
mp.insert(make_pair(m, n));    // 3.用make_pair函数模板插入
mp[m] = n;                     // 4.使用[]运算符重载函数进行插入
mp.insert({m, n});             // 5.使用 {} 插入元素

使用示例:

void insert_test()
{cout << "insert_test: " << endl;unordered_map<int, string> mp; // 构造一个空容器// 1:借助 pair 构造对象插入元素pair<int, string> pr(1, "apple");mp.insert(pr);print_unordered_map(mp);// 2:借助 pair 构造匿名对象插入元素mp.insert(pair<int, string>(2, "banana"));print_unordered_map(mp);// 3:调用make_pair函数模板插入元素mp.insert(std::make_pair(3, "orange"));print_unordered_map(mp);// 4:使用[]运算符重载函数插入元素mp[4] = "pear";print_unordered_map(mp);// 5:使用{}插入元素mp.insert({5, "lemon"});print_unordered_map(mp);
}

测试结果:

--------------------begain-------------------
insert_test: 
1:apple 
2:banana 1:apple 
3:orange 2:banana 1:apple 
4:pear 3:orange 2:banana 1:apple 
5:lemon 4:pear 3:orange 2:banana 1:apple 
--------------------end----------------------

五、vector的元素删除

函数原型:

unordered_map<T1, T2> mp;
mp.erase(key); // 1:根据 key 删除
unordered_map<int, string>::iterator it;
mp.erase(it); // 2:根据迭代器位置删除

使用示例:

void erase_test()
{cout << "erase_test: " << endl;unordered_map<int, string> mp; // 构造一个空容器mp = {{1, "apple"}, {2, "banana"}, {3, "orange"}, {4, "pear"}};mp.erase(2); // 1:根据 key 删除print_unordered_map(mp);unordered_map<int, string>::iterator it;it = mp.begin();it++;it++; // 迭代器没有 +2 操作cout << it->first << ":" << it->second << " " << endl;mp.erase(it); // 2:根据迭代器位置删除print_unordered_map(mp);
}

测试结果:

--------------------begain-------------------
erase_test: 
4:pear 3:orange 1:apple 
1:apple 
4:pear 3:orange 
--------------------end----------------------

六、总结

以上就是今天要讲的内容,后续会有更多内容。

七、参考资料

版权声明:本文参考了其他资料和CSDN博主的文章,遵循CC 4.0 BY-SA版权协议,现附上原文出处链接及本声明。

  1. https://blog.csdn.net/m0_72532428/article/details/143838161
  2. https://blog.csdn.net/2301_78029441/article/details/143855839




















关键字:今天的重要新闻_腾讯短链接_百度搜图_网上怎么注册公司免费的

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: