#pragma once #include #include #include #include #include namespace phosg { template std::vector set_to_vec(const std::set& s) { std::vector ret; ret.reserve(s.size()); for (const auto& x : s) { ret.emplace_back(x); } return ret; } template std::vector set_to_vec(const std::unordered_set& s) { std::vector ret; ret.reserve(s.size()); for (const auto& x : s) { ret.emplace_back(x); } return ret; } template std::set vec_to_set(const std::vector& s) { std::set ret; for (const auto& x : s) { ret.emplace_back(x); } return ret; } template std::unordered_set vec_to_uset(const std::vector& s) { std::unordered_set ret; for (const auto& x : s) { ret.emplace_back(x); } return ret; } template std::vector map_keys_to_vec(const std::map& s) { std::vector ret; ret.reserve(s.size()); for (const auto& it : s) { ret.emplace_back(it.first); } return ret; } template std::vector map_keys_to_vec(const std::unordered_map& s) { std::vector ret; ret.reserve(s.size()); for (const auto& it : s) { ret.emplace_back(it.first); } return ret; } template std::vector map_values_to_vec(const std::map& s) { std::vector ret; ret.reserve(s.size()); for (const auto& it : s) { ret.emplace_back(it.second); } return ret; } template std::vector map_values_to_vec(const std::unordered_map& s) { std::vector ret; ret.reserve(s.size()); for (const auto& it : s) { ret.emplace_back(it.second); } return ret; } } // namespace phosg