c++ 容器 List、set

一、list存放自定义数据 如果删除某个节点 必 须重载 ==运算符

       list容器 对自定义数据排序 重载<运算符

class Person
{
public:
	string m_name;
	int m_age;
	Person(string name, int age):m_age(age), m_name(name){}
	bool operator< (const Person& t)
	{
		return this->m_age < t.m_age;
	}
	bool operator==(const Person& t)
	{
		return (t.m_age == this->m_age) && (t.m_name == this->m_name);
	}
};
void printlistint(list<Person> l)
{
	for (list<Person>::iterator li = l.begin(); li != l.end(); li++)
	{
		cout << (*li).m_name << " " << (*li).m_age << endl;;
	}
}
void test()
{
	list<Person> L;
    L.push_back(Person("斧王", 48));
	L.push_back(Person("火猫", 28));
	L.push_back(Person("大牛", 18));
	L.push_back(Person("蓝猫", 19));
	
	printlistint(L);
	cout << "------------" << endl;
	Person tmp("火猫", 28);
	L.remove(tmp);
	printlistint(L);
	cout << "------------" << endl;
	L.sort();
	printlistint(L);

}

在删除列表元素时,由于是自定义类型,必须要重载==以判定是否为要删除的元素。

在排序时要告诉编译器如何排序 需要重载<运算符。

二、list 对自定义数据排序 指定排序规则

bool myComparePerson(const Person &ob1, const Person &ob2)
{
	return ob1.m_age < ob2.m_age;
}
void test01()
{
	//存放自定义数据
	list<Person> L;
	L.push_back(Person("斧王", 48));
	L.push_back(Person("火猫", 28));
	L.push_back(Person("大牛", 18));
	L.push_back(Person("蓝猫", 19));
	printlistint(L);
	//对于自定义数据 我们可以重载<运算符
	L.sort(myComparePerson);

	printlistint(L);

三、vector 对自定义数据 排序指定排序规则

方法一、普通函数 实现排序规则

bool myComparePerson(const Person &ob1, const Person &ob2)
{
	return ob1.m_age < ob2.m_age;
}
void test02()
{
	vector<Person> v;
	v.push_back(Person("斧王", 48));
	v.push_back(Person("火猫", 28));
	v.push_back(Person("大牛", 18));
	v.push_back(Person("蓝猫", 19));
	//默认比较方式从小‐‐>大
	//vector存放自定义数据 可指定排序规则 (普通函数)
	sort(v.begin, v.end, myComparePerson);

}

方法二、仿函数 指定排序规则

class myComparePerson2
{
 public:
	 bool operator()(Person &ob1, Person &ob2)
     {
		 return ob1.m_age < ob2.m_age;
	 }
};
void test03()
{
	vector<Person> v;
	v.push_back(Person("斧王", 48));
	v.push_back(Person("火猫", 28));
	v.push_back(Person("大牛", 18));
	v.push_back(Person("蓝猫", 19));
	//默认比较方式从小‐‐>大
	//vector存放自定义数据 可指定排序规则 (普通函数)
	//sort(v.begin(),v.end(), myComparePerson);

	//vector存放自定义数据 可指定排序规则 (仿函数)
	sort(v.begin(), v.end(), myComparePerson2());

}

这里mycomparePerson2()为匿名对象,mycomparePerson2()()为仿函数调用,作用相当于函数mycomparePerson2()。

四、lambda表达式

void myPrintVectorInt(vector<int> &v)
{
   for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
   {
       cout << *it << " ";
   }
    cout << endl;
}
//指定打印方式
void myPrint01(int val)
{
    cout << val << " ";
}
void test06()
 {
	 vector<int> v;
	 v.push_back(10);
	 v.push_back(20);
	 v.push_back(30);
	 v.push_back(40);
	
     //方法1:访问v容器 普通函数
	 myPrintVectorInt(v);
	
	//方法2:访问v容器 系统算法for_each
	for_each(v.begin(), v.end(), myPrint01);
	cout << endl;
	
	//方法3:访问v容器 lambda表达式
	//[]表示函数名 ()参数列表 {}函数体
	for_each(v.begin(), v.end(), [](int val) {
		 cout << val << " ";
	});
 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值