std::set
องค์ประกอบไม่ซ้ำแบบเรียงลำดับ
std::set เป็นบทเรียน C++ Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C++ Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน
std::set คืออะไร
std::set จัดเก็บองค์ประกอบที่ไม่ซ้ำกันตามลำดับที่เรียงแล้ว จะไม่มีค่าซ้ำ และการค้นหาทำงานด้วยเวลาแบบลอการิทึม
- คีย์ก็คือค่าเช่นกัน
- เหมาะสำหรับการตรวจสอบการมีสมาชิกและการกำจัดค่าซ้ำ
#include <iostream>
#include <set>
int main() {
std::set<int> s{3, 1, 2, 1, 3};
for (int x : s) std::cout << x << ' ';
std::cout << '\n';
return 0;
}การแทรกค่า
ใช้ insert() เพื่อเพิ่มองค์ประกอบ การแทรกค่าที่มีอยู่แล้วจะถูกละเว้นโดยอัตโนมัติ
#include <iostream>
#include <set>
int main() {
std::set<std::string> s;
s.insert("apple");
s.insert("banana");
s.insert("apple");
std::cout << s.size() << " unique items\n";
return 0;
}ค่าที่คืนจากการแทรก
insert() คืนค่าเป็น pair ซึ่ง .second เป็นค่า bool ที่บอกว่าการแทรกเกิดขึ้นจริงหรือไม่
#include <iostream>
#include <set>
int main() {
std::set<int> s{1, 2};
auto r = s.insert(2);
std::cout << std::boolalpha << "inserted: " << r.second << '\n';
auto r2 = s.insert(5);
std::cout << "inserted: " << r2.second << '\n';
return 0;
}การตรวจสอบสมาชิก
ใช้ count() หรือ contains() ใน C++20 เพื่อตรวจสอบว่ามีค่านั้นอยู่หรือไม่
#include <iostream>
#include <set>
int main() {
std::set<int> s{10, 20, 30};
std::cout << s.count(20) << '\n';
std::cout << s.count(99) << '\n';
return 0;
}การค้นหาองค์ประกอบ
find() คืนตัววนซ้ำไปยังองค์ประกอบที่ตรงกัน หรือคืน end() เมื่อไม่พบ
#include <iostream>
#include <set>
int main() {
std::set<std::string> s{"red", "green", "blue"};
auto it = s.find("green");
std::cout << (it != s.end() ? "found" : "missing") << '\n';
return 0;
}การลบองค์ประกอบ
erase() ลบค่าด้วยคีย์และคืนจำนวนค่าที่ถูกลบ (0 หรือ 1)
#include <iostream>
#include <set>
int main() {
std::set<int> s{1, 2, 3, 4};
s.erase(3);
for (int x : s) std::cout << x << ' ';
std::cout << '\n';
return 0;
}ลำดับที่เรียงแล้ว
องค์ประกอบจะถูกสำรวจตามลำดับจากน้อยไปมากเสมอ ไม่ว่าจะถูกแทรกเข้ามาในลำดับใด
#include <iostream>
#include <set>
int main() {
std::set<int> s{50, 10, 40, 20, 30};
for (int x : s) std::cout << x << ' ';
std::cout << '\n';
return 0;
}การกำจัดข้อมูลซ้ำ
การป้อนค่าเข้า set เป็นวิธีที่รวดเร็วในการกำจัดค่าซ้ำและเรียงลำดับไปพร้อมกัน
#include <iostream>
#include <set>
#include <vector>
int main() {
std::vector<int> v{4, 2, 4, 1, 2, 3, 1};
std::set<int> unique(v.begin(), v.end());
for (int x : unique) std::cout << x << ' ';
std::cout << '\n';
return 0;
}lower_bound และ upper_bound
เนื่องจาก set มีการเรียงลำดับ lower_bound() และ upper_bound() จึงช่วยให้ค้นหาช่วงข้อมูลได้อย่างมีประสิทธิภาพ
#include <iostream>
#include <set>
int main() {
std::set<int> s{10, 20, 30, 40, 50};
auto lo = s.lower_bound(20);
auto hi = s.upper_bound(40);
for (auto it = lo; it != hi; ++it) std::cout << *it << ' ';
std::cout << '\n';
return 0;
}ขนาดและการล้างข้อมูล
size() รายงานจำนวนองค์ประกอบ empty() ตรวจสอบว่าไม่มีองค์ประกอบ และ clear() ลบทุกอย่าง
#include <iostream>
#include <set>
int main() {
std::set<int> s{1, 2, 3};
std::cout << s.size() << '\n';
s.clear();
std::cout << std::boolalpha << s.empty() << '\n';
return 0;
}การแทรกช่วงข้อมูล
คุณสามารถแทรกช่วงข้อมูลทั้งหมดจากคอนเทนเนอร์อื่นได้ โดยระบบจะกำจัดค่าซ้ำและเรียงลำดับให้โดยอัตโนมัติ
#include <iostream>
#include <set>
int main() {
std::set<int> s{1, 2, 3};
int more[] = {3, 4, 5};
s.insert(more, more + 3);
for (int x : s) std::cout << x << ' ';
std::cout << '\n';
return 0;
}ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจเกี่ยวกับการทำงานของ std::set
สรุปทบทวน
คุณได้เรียนรู้ว่า std::set:
- เก็บค่าที่ไม่ซ้ำและเรียงลำดับแล้ว
- ละเว้นการแทรกค่าซ้ำโดยไม่มีการแจ้งเตือน
- รองรับการค้นหาด้วย
find,count,eraseและการค้นหาช่วงแบบมีลำดับด้วยlower_bound/upper_bound
ถัดไป คุณจะได้รู้จัก multimap และ multiset ซึ่งอนุญาตให้มีค่าซ้ำได้
เรียนรู้ C++ ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 51
- บทเรียน
- 203
คำถามที่พบบ่อย
บทเรียน “std::set” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “std::set” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C++ Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “std::set”
องค์ประกอบไม่ซ้ำแบบเรียงลำดับ คุณปฏิบัติ C++ Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C++ Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน C++ Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “std::set” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน C++ Academy นี้ได้ไหม
ได้ บทเรียน C++ Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ