首页 > 技术文章 > 关于对STL容器重载运算符的问题

lishuyu2003 2019-10-18 09:57 原文

注意:下文中vector数组指的是每个数组元素都是一个vector的数组


大部分有序STL容器都重载了小于号,且比较方式是对容器中元素进行字典序比较。
此时如果你写\(bool\ operator<\)重载运算符,重载的内容将被忽视,仍然按字典序进行比较。
如果你想用自己的比较方式对STL容器数组(如vector数组)进行排序,一定要写比较函数,在sort时作为参数传入。注意为保证复杂度,比较函数的参数必须打上&引用。

一个实例:

#include<bits/stdc++.h>
using namespace std;
#define N 100007
vector<int> a[N];
int n=100000;
bool cmp(vector<int> &a,vector<int> &b)
{
	return a[0]-a[1]<b[0]-b[1];
}
int main()
{
	for(int i=1;i<=n;i++)
		a[i].push_back(i),a[i].push_back(2*i);
	//return 0;
	sort(a+1,a+n+1,cmp);
	printf("%d\n",a[1][0]);
}

推荐阅读