An unordered set answers membership questions without requiring the values to stay sorted.

Unordered Set Lookup

unordered_set_lookup.cpp
#include <iostream>
#include <string>
#include <unordered_set>

int main() {
    std::string role = ;

    std::unordered_set<std::string> allowed{"admin", "editor"};
    bool present = allowed.find(role) != allowed.end();

    std::cout << "role=" << role << std::endl;
    std::cout << "present=" << present << std::endl;
    return 0;
}
#include <iostream>
#include <string>
#include <unordered_set>

int main() {
    std::string role = ;

    std::unordered_set<std::string> allowed{"admin", "editor"};
    bool present = allowed.find(role) != allowed.end();

    std::cout << "role=" << role << std::endl;
    std::cout << "present=" << present << std::endl;
    return 0;
}
#include <iostream>
#include <string>
#include <unordered_set>

int main() {
    std::string role = ;

    std::unordered_set<std::string> allowed{"admin", "editor"};
    bool present = allowed.find(role) != allowed.end();

    std::cout << "role=" << role << std::endl;
    std::cout << "present=" << present << std::endl;
    return 0;
}
unordered set A `std::unordered_set` stores unique values and optimizes lookup instead of ordering.
contains Before C++20, `find` is the common membership check for unordered sets.