Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

การเรียงลำดับเวกเตอร์ของวัตถุที่กำหนดเองโดยใช้ C++ STL


คุณสามารถจัดเรียงเวกเตอร์ของวัตถุที่กำหนดเองได้โดยใช้ฟังก์ชัน C++ STL std::sort ฟังก์ชัน sort มีรูปแบบที่โอเวอร์โหลดซึ่งใช้เป็นอาร์กิวเมนต์ก่อน ตัวสุดท้าย ตัวเปรียบเทียบ ตัวแรกและตัวสุดท้ายเป็นตัววนซ้ำองค์ประกอบแรกและสุดท้ายของคอนเทนเนอร์ ตัวเปรียบเทียบเป็นฟังก์ชันเพรดิเคตที่สามารถใช้เพื่อบอกวิธีการจัดเรียงคอนเทนเนอร์

ตัวอย่าง

#include<iostream>
#include<algorithm>
#include<vector>

using namespace std;
struct MyStruct {
   int key;
   string data;
   MyStruct(int key, string data) {
      this -> key = key;
      this -> data = data;
   }
};
int main() {
   std::vector<MyStruct> vec;
   vec.push_back(MyStruct(4, "test"));
   vec.push_back(MyStruct(2, "is"));
   vec.push_back(MyStruct(3, "a"));
   vec.push_back(MyStruct(1, "this"));
   
   // Using lambda expressions in C++11
   sort(vec.begin(), vec.end(), [](const MyStruct& lhs, const MyStruct& rhs) {
      return lhs.key < rhs.key;
   });
   for(auto it = vec.begin(); it != vec.end(); it++) {
      cout << it -> data << endl;
   }
}

ผลลัพธ์

สิ่งนี้จะให้ผลลัพธ์ -

this is a test

หากคุณกำลังใช้งาน C++ เวอร์ชันเก่า คุณสามารถส่งการอ้างอิงฟังก์ชันได้เช่นกัน -

//define the function:
bool comparator(const MyStruct& lhs, const MyStruct& rhs) {
   return lhs.key < rhs.key;
}
// pass it to sort:
sort(vec.begin(), vec.end(), &comparator);

คุณยังสามารถโอเวอร์โหลดตัวดำเนินการ <ในคลาส/struct และใช้แบบฟอร์ม sort(first, last) ได้โดยตรง ดังนั้นเมื่อทำการเรียงลำดับ จะใช้ฟังก์ชันนี้เพื่อเปรียบเทียบรายการ