前言

紀錄如何處理C++中以struct建構的vector array的排序問題

用法

在C++中,Vector幾乎完全取代C裡面的array型態

除了它本身含有許多功能可以直接取用,像是基本的begin(), end(), size(), max_size(), empty(), swap()等等之外,它能直接與C++的STL函式庫配合,簡直是太強大了,以前寫C需要硬刻的Sorting、Linked list、BST或是hash,在C++中都變得容易許多!(前提是你必須有資料結構以及演算法的基本概念,否則也只是瞎用亂用啦)

因為很少寫C++,導致常常需要用到Vector做處理時,卻忘了有哪些library可以用 = =

Case描述:

需要用到Struct建構資料,用Vector型態建立一個Array,並且根據其中一個element做排序

需要include的函示庫:

1
2
3
#include <vector>   // std::vector
#include <functional> // std::greater
#include <algorithm> // std::sort

宣告struct

1
2
3
4
struct Item{
int value;
int weight;
};

宣告以struct型態建構的vector array

1
vector<Item> items(n);

讀取資料進來

這個Case是知道要讀幾筆,所以就用老方法index做了,應該用iterator比較好OTZ

1
2
3
for (int i = 0; i < n; i++){
cin >> items[i].value >> items[i].weight;
}

如果對排序有特殊需求,需要自己寫一個簡易的compare function,更複雜一點的需要創一個Template

1
2
3
bool myCompare(Item i1, Item i2){
return i1.value > i2.value;
}

直接用C++提供的sort函式做sorting

需要注意的是最後一個參數放的是自己的比較function,所以最後結果會是由大到小排好的

1
sort(items.begin(), items.end(), myCompare);

參考:C++ Reference