//#(compile) c++; compiler:g132; options:-O3 -std=c++23; libs:-
// https://godbolt.org/z/xnv9Wbxbz
#include <set>
#include <iostream>
using std::cout; using std::ostream; using std::set;
void suchmal(const set<int>&data, int was, ostream&os) {
os << was << "? ";
// enthält
auto drin = data.contains(was); // C++20
os << "drin:" << (drin ? "ja." : "nein."); // enthält prüfen
auto wo = data.find(was);
if(wo != data.end()) {
os << " gefunden:" << *wo << " ";
} else {
os << " nicht gefunden. ";
}
auto lo = data.lower_bound(was);
if(lo != data.end()) {
os << "lo:" << *lo;
} else {
os << "lo:-";
}
auto up = data.upper_bound(was);
if(up != data.end()) {
os << " up:" << *up;
} else {
os << " up:-";
}
// [lo,up] ist nun das Gleiche, was equal_range geliefert hätte
os << " Bereich:{";
for( ; lo != up; ++ lo) {
os << *lo << ' ';
}
os << "}";
// zählen
os << " C:" << data.count(was) // Treffer zählen
<< "\n";
}
int main() {
set data{ 10, 20, 30, 40, 50, 60 };
suchmal(data, 20, cout); // 20? drin:ja. gefunden:20 lo:20 up:30 Bereich:{20 } C:1
suchmal(data, 25, cout); // 25? drin:nein. lo:30 up:30 Bereich:{} C:0
suchmal(data, 10, cout); // 10? drin:ja. gefunden:10 lo:10 up:20 Bereich:{10 } C:1
suchmal(data, 60, cout); // 60? drin:ja. gefunden:60 lo:60 up:- Bereich:{60 } C:1
suchmal(data, 5, cout); // 5? drin:nein. lo:10 up:10 Bereich:{} C:0
suchmal(data, 99, cout); // 99? drin:nein. lo:- up:- Bereich:{} C:0
}