std::set tracks unique values and answers membership questions.

set membership A set is useful when code needs to ask whether a value is present.

Set Membership

role
set_membership.cpp
Replay: real traced execution (multi-file project)
#include <iostream>
#include <set>
#include <string>

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

    std::set<std::string> writers{"admin", "editor"};
    bool canWrite = writers.count(role) > 0;

    std::cout << "role=" << role << std::endl;
    std::cout << "canWrite=" << canWrite << std::endl;
    std::cout << "knownRoles=" << writers.size() << std::endl;
    return 0;
}
#include <iostream>
#include <set>
#include <string>

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

    std::set<std::string> writers{"admin", "editor"};
    bool canWrite = writers.count(role) > 0;

    std::cout << "role=" << role << std::endl;
    std::cout << "canWrite=" << canWrite << std::endl;
    std::cout << "knownRoles=" << writers.size() << std::endl;
    return 0;
}
#include <iostream>
#include <set>
#include <string>

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

    std::set<std::string> writers{"admin", "editor"};
    bool canWrite = writers.count(role) > 0;

    std::cout << "role=" << role << std::endl;
    std::cout << "canWrite=" << canWrite << std::endl;
    std::cout << "knownRoles=" << writers.size() << std::endl;
    return 0;
}
  1. role ← editor, writers ← (empty), canWrite ← 1

    5int main() {6    std::string role→ editor = "editor"; //@role="guest", "admin"78    std::set<std::string> writers→ (empty){"admin", "editor"};9    bool canWrite→ 1 = writers(empty).count(roleeditor) > 0;1011    std::cout << "role=" << roleeditor << std::endl;12    std::cout << "canWrite=" << canWrite1 << std::endl;13    std::cout << "knownRoles=" << writers(empty).size() << std::endl;14    return 0;15}
    outputrole=editor
    canWrite=1
    knownRoles=2
  1. role ← guest, writers ← (empty), canWrite ← 0

    5int main() {6    std::string role→ guest = "guest";78    std::set<std::string> writers→ (empty){"admin", "editor"};9    bool canWrite→ 0 = writers(empty).count(roleguest) > 0;1011    std::cout << "role=" << roleguest << std::endl;12    std::cout << "canWrite=" << canWrite0 << std::endl;13    std::cout << "knownRoles=" << writers(empty).size() << std::endl;14    return 0;15}
    outputrole=guest
    canWrite=0
    knownRoles=2
  1. role ← admin, writers ← (empty), canWrite ← 1

    5int main() {6    std::string role→ admin = "admin";78    std::set<std::string> writers→ (empty){"admin", "editor"};9    bool canWrite→ 1 = writers(empty).count(roleadmin) > 0;1011    std::cout << "role=" << roleadmin << std::endl;12    std::cout << "canWrite=" << canWrite1 << std::endl;13    std::cout << "knownRoles=" << writers(empty).size() << std::endl;14    return 0;15}
    outputrole=admin
    canWrite=1
    knownRoles=2