• 关于对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]);
    }
    
  • 相关阅读:
    Windows 7 SP1无人值守自动应答文件制作
    Ubuntu GNOME单击任务栏图标最小化设置
    NOIP2017题解
    NOIP2017游记
    大模拟1.0
    奇袭
    礼物
    找硬币
    Fiolki
    SQLserver Delete from where 与Oracle delete from where 的差异
  • 原文地址:https://www.cnblogs.com/lishuyu2003/p/11696668.html
Copyright © 2020-2023  润新知