1. 程式人生 > >STL自定義比較器

STL自定義比較器

對於下邊這個結構我們需要按照age排序

struct Person
{
    string name;
    int age;
}
//自定義的比較器
struct compareByAge
{
    bool operator()(const Person& p1,const Person p2)
    {
        return p1.age<p2.age;
    }
}
//構造vector
vector<Person>vec{p1,p2....};
sort(vec.begin(),vec.end(),compareByAge());//排序傳入我們自定義的比較器

map按照value排序

map內部的實現使用的是樹,不能夠直接排序,我們可以將其放在一個vector中,然後自定義一個比較器去排序

map<string,int>mapTest;
mapTest["zhangsan"]=2;
mapTest["lisi"]=3;
...
vector<pair<string,int>>vec{mapTest.begin(),mapTest.end()};//初始化vector
//定義比較器
struct compare
{
    bool operator()(const pair<string,int>&p1,const
pair<string,int>&p2) { return p1.second<p2.second;//second為value } } //排序 sort(vec.begin(),vec.end(),compare());//呼叫自己的比較器函式

我們來看一個例項:

struct ptr_compare//自定義比較器按照key中的指標指向的內容排序
{
    bool operator()(const shared_ptr<string>&p1,const shared_ptr<string>&p2)
    {
        return
*p1>*p2; } }; struct comp//自定義比較器按照value排序 { bool operator()(const pair<shared_ptr<string>,string>&p1,const pair<shared_ptr<string>,string>&p2) { return p1.second<p2.second; } }; int main() { map<shared_ptr<string>,string,ptr_compare>ptr_map;//按照key中的指標指向的資料排序 shared_ptr<string>s1{new string{"hello"}}; shared_ptr<string>s2{new string{"world"}}; shared_ptr<string>s3{new string{"just"}}; shared_ptr<string>s4{new string{"for"}}; shared_ptr<string>s5{new string{"test"}}; ptr_map[s1]="0"; ptr_map[s2]="1"; ptr_map[s3]="2"; ptr_map[s4]="3"; for_each(ptr_map.begin(),ptr_map.end(),[](pair<shared_ptr<string>,string>p) { cout<<*p.first<<" "<<p.second<<endl; }); vector<pair<shared_ptr<string>,string>>vec(ptr_map.begin(),ptr_map.end());//將map中的pair資料放到vector中 sort(vec.begin(),vec.end(),comp());//使用自定義比較器 for_each(vec.begin(),vec.end(),[](pair<shared_ptr<string>,string>p){ cout<<*p.first<<" "<<p.second<<endl; }); }

相關推薦

STL定義比較

對於下邊這個結構我們需要按照age排序 struct Person { string name; int age; } //自定義的比較器 struct compareByA

定義比較CustomComparator

mco oid port for list str new com public package com.list; import java.util.ArrayList; import java.util.Comparator; import java.util.Li

創建一個定義比較

rac void ger 接口 table string pre ride com 雙列集合: -------------| Map 如果是實現了Map接口的集合類,具備的特點: 存儲的數據都是以鍵值對的形式存在的,鍵不可重復,值可以重復。 ---------------

利用List的sort方法,定義比較對類屬性進行排序

JDK1.8之後,List新增了sort方法,使用Comparator作為引數,呼叫者可自定義比較規則。 User user1 = new User(12, "張三"); User use

#資料結構與演算法學習筆記#劍指Offer30:把陣列排成最小的數 + 定義比較 + 測試用例(Java、C/C++)

2018.10.6 1.求全排列最小。事實上用全排列硬剛這道題確實是最直接的辦法,因為乍一眼看上去實在不好歸納數字之間的順序關係,全排列具體實現原理可以參考上述文章。 2.自定義比較器。為什麼說

利用Collections.sort 定義比較 ,對集合元素時間進行排序

1.自定義比較器public class SortClass implements Comparator { @Override public int compare(Object arg0, Object arg1) { ProjectInfo Projec

Java中的equals方法和定義比較

class Student { private String name; private int age; Student(String name,int age) { this.name = name; this.age = age; } public S

淺談JavaScript--Array陣列sort()排序方法與定義比較的使用

陣列的排序的重要性不必多說,到處可見,現在來說說sort()方法的使用與自定義比較器 sort()方法:預設將陣列中的所有元素轉為字串後再排列(預設是升序),用來排列字串型別的元素 比如一個數組:

Collections之sort的兩個方法(自然排序和定義比較排序)

Collections是個服務於Collection的工具類(靜態的),它裡面定義了一些集合可以用到的方法。 本文演示了Collections類裡sort()的兩個方法。第一種只需傳入被排序的集合,便會為它自然排序。但有時我們需要自定義排序的方式,這是我們就得定義一個比較器

Java定義比較實現中文排序

compareTo 方法   compareTo()是兩個字串物件比較大小,返回一個整數值,如果呼叫字串物件大,返回正整數,反之,返回負整數。相等則返回0。compareTo()是兩個字串物件按ASCII比較大小(漢字是Unicode),返回一個整數值,如果呼

C#排序函式和定義比較

在C#中,要比較兩個陣列,可以呼叫 System.Array.Sort(...)方法 List等也有Sort()方法 有兩種方式可以為自己的類提供排序; 1.類實現介面 IComparable 2.建立比較器類,該類實現介面IComparer 第二種方法的優點是,你可

Java 定義比較

Comparator 和 Comparable 相同點   Comparator 和 Comparable都是java的介面,並且是用來對自定義的class比較大小的。   對於自定義類如:public class Person{ String name;

在struts2中配置定義攔截放行多個方法

return med ttr limit ring req tac cat invoke 源碼: 自定義的攔截器類: //自定義攔截器類:LoginInterceptor ; package com.java.action.interceptor; import j

SpringMVC 定義轉換

del 轉化 string sna 問題 print request package type 實踐SpringMVC轉化器是遇到的問題:表單提交沒有經過自定義轉換器(解決:表單用post方式提交) 自定義轉化器代碼 package cn.liangqinghai.

JAVAEE——struts2_04:定義攔截、struts2標簽、登陸功能和校驗登陸攔截的實現

strac htm logs transacti 標識 area 返回 ftw jsp 一、自定義攔截器   1.架構      2.攔截器創建 //攔截器:第一種創建方式 //攔截器生命周期:隨項目的啟動而創建,隨項目關閉而銷毀 public class MyInt

struts2學習(6)定義攔截-登錄驗證攔截

back tps class res urn fff .com space war 需求:對登錄進行驗證,用戶名cy 密碼123456才能登錄進去;   登錄進去後,將用戶存在session中; 其他鏈接要來訪問(除了登錄鏈接),首先驗證

手機影音第六天 定義播放頁面的實現(按鈕暫時未監聽)

手機影音第六天 自定義播放器布局以及橫豎屏切換播放器時的問題解決 目前進度的項目源代碼托管在裏碼雲上,地址如下: https://git.oschina.net/joy_yuan/MobilePlayer 感興趣的可以去下載看看,多多支持

定義攔截判斷用戶是否有權限訪問

indexof mon com source ora extend ide isa att 1、關於權限系統,對於用戶是否有權限對系統進行訪問,設置自定義攔截器,來攔截用戶的請求 1 package org.slsale.interceptor; 2 3 impo

TreeSet排序,存儲自己定義對象,自己定義比較演示樣例

strlen 覆蓋 () num imp rgs com 哈希 ash Set:無序。不能夠反復元素。 |--HashSet:數據結構是哈希表。線程是非同步的。 保證元素唯一性的原理:推斷元素的hashCode值是否同樣。 假設同樣,還會繼續推斷

使用html5中video定義播放必備知識點總結以及JS全屏API介紹

標簽 quest htm round internet tel ren per 全屏 一、video的js知識點: controls(控制器)、autoplay(自動播放)、loop(循環)==video默認的; 自定義播放器中一些JS中提供的方法和屬性的記錄: 1、pla