linux下练习 c++ 关联式容器共性测试,使用

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: /* 关联式容器共性:二叉查找树实现,自动根据关键字排序,自动平衡 set,multiset,map,multimap 查找:.find(key) 失败返回.
/*
关联式容器共性:二叉查找树实现,自动根据关键字排序,自动平衡
		  set<K>,multiset<K>,map<K,V>,multimap<K,V>
查找:.find(key) 失败返回.end()
统计:.count(key)
删除:.erase(key)
插入:.insert(element)
区间:.lower_bund(key) //取得关键字为key的第一个元素位置
	 .upper_bound(key) //取得关键字为key的最后一个元素之后的位置
	 .equal_range(key) 取得关键字为key的区间,返回pair
构造函数可用比较函数作为参数  bool func(K a,K b)
*/
#include<iostream>
#include<set>
#include<string>
using namespace std;
#include "print.h"
struct person
{
	string name;
	int age;
public:
	person(const char* n,int a):name(n),age(a){}
};
bool operator<(const person& a,const person& b)
{
	return a.age<b.age||(a.age==b.age&& a.name<b.name);//找的时候按这个找
}
ostream& operator<<(ostream& o,const person& x)
{
	return o<<x.name<<':'<<x.age<<"  ";
}
int main()
{
	multiset<person> mp;
	mp.insert(person("ccc",16));
	mp.insert(person("aaa",13));
	mp.insert(person("aaa",13));
	mp.insert(person("kkk",18));
	mp.insert(person("fff",15));
	mp.insert(person("eee",11));
	mp.insert(person("jjj",16));
	print(mp.begin(),mp.end());
	multiset<person>::iterator it=mp.find(person("fff",15));
	if(it==mp.end()) cout<<"not find!\n";
	else
	{
	 cout<<"find:"<<*it
         <<" "<<mp.count(*it)<<"个\n";
	}
	person a("aaa",13);
	cout<<a<<" "<<mp.count(a)<<"个\n";
	cout<<"lower/upper bound方法:\n";
	multiset<person>::iterator ibegin,iend;
	ibegin=mp.lower_bound(a);
	iend=mp.upper_bound(a);
	print(ibegin,iend);
	cout<<"pair方法:\n";
	typedef multiset<person>::iterator myiter;//给长类型起个别名
	pair<myiter,myiter> p=mp.equal_range(a);
	print(p.first,p.second);
	cout<<"删除后输出:\n";
	mp.erase(person("kkk",18));//有多个就删除多个
	print(mp.begin(),mp.end());
	
}


 

结果:

 

相关文章
|
3月前
|
网络协议 安全 Linux
Linux C/C++之IO多路复用(select)
这篇文章主要介绍了TCP的三次握手和四次挥手过程,TCP与UDP的区别,以及如何使用select函数实现IO多路复用,包括服务器监听多个客户端连接和简单聊天室场景的应用示例。
105 0
|
3月前
|
存储 Linux C语言
Linux C/C++之IO多路复用(aio)
这篇文章介绍了Linux中IO多路复用技术epoll和异步IO技术aio的区别、执行过程、编程模型以及具体的编程实现方式。
141 1
Linux C/C++之IO多路复用(aio)
|
3月前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
790 3
|
3月前
|
资源调度 Linux 调度
Linux C/C++之线程基础
这篇文章详细介绍了Linux下C/C++线程的基本概念、创建和管理线程的方法,以及线程同步的各种机制,并通过实例代码展示了线程同步技术的应用。
45 0
Linux C/C++之线程基础
|
3月前
|
Linux C++
Linux C/C++之IO多路复用(poll,epoll)
这篇文章详细介绍了Linux下C/C++编程中IO多路复用的两种机制:poll和epoll,包括它们的比较、编程模型、函数原型以及如何使用这些机制实现服务器端和客户端之间的多个连接。
56 0
Linux C/C++之IO多路复用(poll,epoll)
|
3月前
|
网络协议 Linux 网络性能优化
Linux C/C++之TCP / UDP通信
这篇文章详细介绍了Linux下C/C++语言实现TCP和UDP通信的方法,包括网络基础、通信模型、编程示例以及TCP和UDP的优缺点比较。
74 0
Linux C/C++之TCP / UDP通信
|
3月前
|
消息中间件 Linux API
Linux c/c++之IPC进程间通信
这篇文章详细介绍了Linux下C/C++进程间通信(IPC)的三种主要技术:共享内存、消息队列和信号量,包括它们的编程模型、API函数原型、优势与缺点,并通过示例代码展示了它们的创建、使用和管理方法。
50 0
Linux c/c++之IPC进程间通信
|
3月前
|
Linux C++
Linux c/c++进程间通信(1)
这篇文章介绍了Linux下C/C++进程间通信的几种方式,包括普通文件、文件映射虚拟内存、管道通信(FIFO),并提供了示例代码和标准输入输出设备的应用。
40 0
Linux c/c++进程间通信(1)
|
3月前
|
Linux C++
Linux c/c++之进程的创建
这篇文章介绍了在Linux环境下使用C/C++创建进程的三种方式:system函数、fork函数以及exec族函数,并展示了它们的代码示例和运行结果。
62 0
Linux c/c++之进程的创建
|
3月前
|
Linux C++
Linux c/c++进程之僵尸进程和守护进程
这篇文章介绍了Linux系统中僵尸进程和守护进程的概念、产生原因、解决方法以及如何创建守护进程。
43 0