สมมติว่าเรามีโครงสร้างข้อมูลที่กำหนดไว้สำหรับข้อมูลประเภทจำนวนเต็ม ในการป้อนข้อมูลมาตรฐานของเรา เรามี n แบบสอบถาม ในแต่ละแบบสอบถาม (ในแต่ละบรรทัด) เรามีสององค์ประกอบ อันแรกเป็นตัวดำเนินการ อันที่สองคือองค์ประกอบ การดำเนินการจะเป็นดังนี้ -
-
แทรก. ซึ่งจะแทรกองค์ประกอบเข้าไปในชุด
-
ลบ. การดำเนินการนี้จะลบองค์ประกอบออกจากชุด (ถ้ามี)
-
ค้นหา. สิ่งนี้จะค้นหาองค์ประกอบในชุดหากแสดงใช่หรือไม่ใช่
ดังนั้น หากอินพุตเป็น n =7, คำสั่ง =[[1,5],[1,8],[1,3],[2,8],[1,9],[3,8], [3,3]] จากนั้นผลลัพธ์จะเป็น [No, Yes] เนื่องจากไม่มี 8 ในชุดและมี 3 อยู่
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- กำหนดหนึ่งชุด s
- กำหนดหนึ่งชุด iterator 'it' เพื่อวนซ้ำผ่าน s
- q :=จำนวนคำค้นหา
- ในขณะที่ q ไม่ใช่ศูนย์ ให้ลด q หลังจากการวนซ้ำแต่ละครั้ง ให้ทำ:
- ใช้แบบสอบถามประเภท qt
- สำหรับ qt
- ถ้า qt เป็น 1 ให้ใส่ x s
- ออกมาจากบล๊อก
- ถ้า qt เป็น 2 ให้ลบ x ออกจาก s
- ออกมาจากบล๊อก
- ถ้า qt เป็น 3,
- เรียก find(x) ข้างในนั้น
- ถ้ามันเหมือนกับองค์ประกอบสุดท้ายของ s แล้ว:
- พิมพ์ไม่
- มิฉะนั้น
- พิมพ์ใช่
- ออกมาจากบล๊อก
- ถ้า qt เป็น 1 ให้ใส่ x s
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <iostream>
#include <set>
using namespace std;
int main(){
set<int> s;
set<int>::iterator it;
int q,x;
int qt;
cin >> q;
while(q--){
cin>>qt>>x;
switch(qt){
case 1:s.insert(x);
break;
case 2:s.erase(x);
break;
case 3:it=s.find(x);
if(it==s.end())
cout<<"No"<<endl;
else
cout<<"Yes"<<endl;
break;
}
}
return 0;
}
อินพุต
7 1 5 1 8 1 3 2 8 1 9 3 8 3 3
ผลลัพธ์
No Yes