#include #include #include #include using namespace std::literals; template void printInsertionStatus(It it, bool success) { std::cout << "Insertion of " << it->first << (success ? " succeeded\n" : " failed\n"); } int main() { std::map karasunoPlayerHeights; // Overload 3: insert from rvalue reference const auto [it_hinata, success] = karasunoPlayerHeights.insert({"Hinata"s, 162.8}); printInsertionStatus(it_hinata, success); { // Overload 1: insert from lvalue reference const auto [it, success2] = karasunoPlayerHeights.insert(*it_hinata); printInsertionStatus(it, success2); } { // Overload 2: insert via forwarding to emplace const auto [it, success] = karasunoPlayerHeights.insert({"Kageyama", 180.6}); printInsertionStatus(it, success); } { // Overload 6: insert from rvalue reference with positional hint const std::size_t n = std::size(karasunoPlayerHeights); const auto it = karasunoPlayerHeights.insert(it_hinata, {"Azumane"s, 184.7}); printInsertionStatus(it, std::size(karasunoPlayerHeights) != n); } { // Overload 4: insert from lvalue reference with positional hint const std::size_t n = std::size(karasunoPlayerHeights); const auto it = karasunoPlayerHeights.insert(it_hinata, *it_hinata); printInsertionStatus(it, std::size(karasunoPlayerHeights) != n); } { // Overload 5: insert via forwarding to emplace with positional hint const std::size_t n = std::size(karasunoPlayerHeights); const auto it = karasunoPlayerHeights.insert(it_hinata, {"Tsukishima", 188.3}); printInsertionStatus(it, std::size(karasunoPlayerHeights) != n); } auto node_hinata = karasunoPlayerHeights.extract(it_hinata); std::map playerHeights; // Overload 7: insert from iterator range playerHeights.insert(std::begin(karasunoPlayerHeights), std::end(karasunoPlayerHeights)); // Overload 8: insert from initializer_list playerHeights.insert({{"Kozume"s, 169.2}, {"Kuroo", 187.7}}); // Overload 9: insert node const auto status = playerHeights.insert(std::move(node_hinata)); printInsertionStatus(status.position, status.inserted); node_hinata = playerHeights.extract(status.position); { // Overload 10: insert node with positional hint const std::size_t n = std::size(playerHeights); const auto it = playerHeights.insert(std::begin(playerHeights), std::move(node_hinata)); printInsertionStatus(it, std::size(playerHeights) != n); } // Print resulting map std::cout << std::left << '\n'; for (const auto& [name, height] : playerHeights) std::cout << std::setw(10) << name << " | " << height << "cm\n"; }