关于对STL容器重载运算符的问题

注意:下文中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
",a[1][0]);
}
原文地址:https://www.cnblogs.com/lishuyu2003/p/11696668.html