首页 > 其他分享 >容器使用之multiset

容器使用之multiset

时间:2024-04-22 22:34:07浏览次数:13  
标签:__ 容器 multimap value long 使用 multiset buf hashtable

容器使用之multiset

可以理解为小型关联数据库

底层结构:

红黑树

示例代码:

#pragma
#ifndef __MULTISET__
#define __MMULTISE__

#include <set>
#include <iostream>

using namespace std;

namespace MyTestSet {
void test_set(long& value) {
multiset<string> c; // 重复值可以插入节点
char buf[10];

for (long i = 0; i < value; i++)
{
try
{
snprintf(buf, 10, "%d", rand());
c.insert(string(buf)); // insert方法自动将元素找到节点插入
}
catch (const exception& p)
{
cout << p.what() << endl;
abort();
}
}
}
}

#endif // !__MULTISET__

特点:

  • 红黑树单节点结构

  • key就是vlaue,value就是key

容器使用之multimap

示例代码:

#pragma
#ifndef __MULTIMAP__
#define __MULTIMAP__

#include <map>
#include <iostream>

using namespace std;

namespace MyTestMap {
void test_multimap(long& value) {
multimap<long, string> c;
char buf[10];

for (long i = 0; i < value; i++)
{
try
{
snprintf(buf, 10, "%d", rand());
c.insert(pair<long, string>(i, buf)); // 一对一对的插入 -> 标准库提供的结构
}
catch (const exception& p)
{
cout << p.what() << endl;
abort();
}
}

long target = 23456;

auto pItem = c.find(target);

// 由于map每个节点是一组key和value -> 那么取值的时候就要取到第二个元素
       // 因为放进去的是pair
cout << "found value:\t" << (*pItem).second << endl;
}
}

#endif // !__MULTIMAP__

使用map

示例代码:

    void test_map(long& value) {
map<long, string> c;
char buf[10];

for (long i = 0; i < value; i++)
{
try
{
snprintf(buf, 10, "%d", rand());
c[i] = string(buf); // multimap不能用这种赋值方式
// 这个赋值方式key是不会重复,前面的multimap以pair的方式存入multimap会出现重复值
}
catch (const exception& p)
{
cout << p.what() << endl;
abort();
}
}
}

基于hashtable实现的multiset

底层结构是hashtable -> 数组链表

基于hashtable实现的multimap

底层结构是hashtable -> 数组链表

上面的关键点是hashtable后面的链表的散列算法:

  • 如果元素>数组长度,那么就会重新声明hashtable的散列表长度

  • 所有的multi数据都允许重复的key存在

hash的四个容器:

  • hash_Set

  • hash_map

  • hash_multiset

  • hash_multimap

标签:__,容器,multimap,value,long,使用,multiset,buf,hashtable
From: https://www.cnblogs.com/JunkingBoy/p/18151731

相关文章

  • HarmonyOS NEXT应用开发案例—使用弹簧曲线实现抖动动画及手机振动效果案例
    介绍本示例介绍使用vibrator.startVibration方法实现手机振动效果,用animateTo显示动画实现点击后的抖动动画。效果图预览使用说明加载完成后显示登录界面,未勾选协议时点击一键登录按钮会触发手机振动效果和提示文本的抖动动画。实现思路创建一个函数startVibrate()调用v......
  • 使用pytesseract库识别图形验证码的简单案例
    importrequestsfromPILimportImageimportpytesseract#获取验证码图片url='http://jw.glutnn.cn/academic/getCaptcha.do?captchaCheckCode=0&random=0.20354331774429668'response=requests.get(url)#保存验证码图片withopen('captcha.png',&......
  • 试说明表单和超链接的相同点和不同点,及各自的使用场合
    表单和超链接都是Web页面中的交互元素,它们允许用户与网站进行交互,但它们在功能和使用场合上有一些明显的相同点和不同点。相同点:交互性:表单和超链接都提供了用户与网页进行交互的方式。用户可以通过点击超链接跳转到另一个页面,或者通过填写表单提交信息给服务器。导航:在一定程......
  • Cookie的使用
    Cookie也被称作Cookies,它是一种让网站的服务器端可以把少量数据存储在客户端的硬盘或内存中,而后续又可以从客户端中读取该数据的技术。在网站中,http请求是呈无序状态的无序状态是指协议对于事务处理没有记忆能力,同一个服务器上你新打开的网页和之前打开的网页之间没有任何联系,......
  • wps使用FileDialog(msoFileDialogFolderPicker)问题解决
    在vba里面使用了WithApplication.FileDialog(msoFileDialogFolderPicker),在excel里面多次测试均正常,但在wps里面运行时,发现只有打开文档后第一次运行宏是正确的,之后运行就再取不到选取的单元格,不管怎么选取,.SelectedItems.Count都是0。百度搜索为什么。 找到两个帖子1、 ......
  • Spyder 5使用其他解析器
     Spyderhasreleasedversion5ofSpyderIDEanditcomeswithitsownsetofpackages.Ifyouwanttouseotherpackagesthanpre-installedpackages,followingsetofinstructionsmaybehelpfultoyou.Step-1: AddpathofPythoninstallationtoPYTHON......
  • 这个网站真的太香了!居然可以免费使用AI聊天工具和“智能AI聊天助手”项目源码!
    宝子们,在这个AI爆火的时代,你是否还在因为无法使用ChatGpt而头疼?是否还在寻觅一款国内的好用AI工具呢?好消息!小编花费三个月终于找到了一个可以免费使用AI聊天工具的网站,由于这个网站之前一直在内测阶段,所以就没有给大家分享。刚好,近期这个网站正式上线了。小编今天就来好好跟大......
  • 使用nssm在windows服务器上部署nodejs
    在Linux上,可以轻松的使用forever或者pm2来部署nodejs应用。但是在windows下就麻烦了,pm2明确的说支持Linux&MacOS,forever在windows下貌似问题多多:  另外还有一个选择就是iisnode,这个有空研究一下,今天先说下比较简单的nssm。nssm会监控你安装的node服务,如果node挂了,nssm会......
  • SLS 查询新范式:使用 SPL 对日志进行交互式探索
    作者:无哲引言在构建现代数据和业务系统的过程中,可观测性已经变得至关重要,日志服务(SLS)为Log/Trace/Metric数据提供了大规模、低成本、高性能的一站式平台服务,并提供数据采集、加工、投递、分析、告警、可视化等功能,从而全面提升企业在研发、运维、运营和安全等各种场景的数字化......
  • fiber使用websocket--多进程版本
    多进程数据是隔离的,也就是说处理不好,不同的用户登录,其实不在一个进程,没办法直接通信解决办法:定义一个全局变量,所有进程公用,要加锁如果是单进程版本其实就跟gin框架那些一样了多线程+channel不存在数据隔离的问题main.gopackagemainimport( "flag" "fmt" "log" "sync"......