นี่คือวิธีสร้าง set สำหรับข้อมูลประเภทผู้ใช้กำหนดเอง (user-defined data types) Set อยู่ใน C++ STL เป็นโครงสร้างข้อมูลพิเศษ จัดเก็บข้อมูลเรียงลำดับ และไม่รองรับค่าซ้ำ สามารถใช้ set สำหรับข้อมูลประเภทใดก็ได้ แต่จะดูวิธีใช้กับข้อมูลผู้ใช้กำหนดเอง
เพื่อใช้ข้อมูลผู้ใช้กำหนดเองใน set ต้อง override operator < ที่เปรียบเทียบค่าสองค่าของประเภทนั้น ถ้าไม่มี จะไม่สามารถเปรียบเทียบออบเจกต์ได้ set จึงจัดเก็บเรียงลำดับไม่ได้ และจะโยน exception
ตัวอย่าง
#include <iostream>
#include <set>
using namespace std;
class Student {
int id, marks;
public:
Student(int id, int marks) {
this->id = id;
this->marks = marks;
}
bool operator <(const Student& st) const {
return (this->id < st.id);
}
void display() const {
cout << "(" << id << ", " << marks << ")\n";
}
};
main() {
Student s1(5, 70), s2(3, 86), s3(2, 91), s4(2, 60), s5(1, 78), s6(6, 53), s7(4, 59);
// set จะไม่พิจารณา id ซ้ำ
set<Student> st_set;
st_set.insert(s1);
st_set.insert(s2);
st_set.insert(s3);
st_set.insert(s4);
st_set.insert(s5);
st_set.insert(s6);
st_set.insert(s7);
set<Student>::iterator it;
for (it = st_set.begin(); it != st_set.end(); it++) {
it->display();
}
}
ผลลัพธ์
(1, 78) (2, 91) (3, 86) (4, 59) (5, 70) (6, 53)