如何用数组初始化std::map?

How to initialize std::map by an array?

我有一个任务要用数组

填充空 std::map<char, std::set<std::string>> myMap
const char* s[] = { "car", "sun", "surprise", "asteriks", "alpha", "apple" };

并使用 range based forbindings 打印它。结果,应该像 S: sun, surprise

最后一个(打印)我已经这样实现了

for (const auto& [k, v] : myMap)
{
    cout << "k = " << k << endl;
    std::set<std::string>::iterator it;
    for (it = v.begin(); it != v.end(); ++it)
    {
        cout << "var = " << *it << endl;
    }
}

但是我如何通过 const char* s[] 以正确的方式初始化这张地图?

P.S。我知道,如何像 std::mapstd::set<std::string>> myMap = { {'a', {"abba", "abart", "audi"} } }; 一样初始化它,我在 Whosebug 上阅读了 this and this 帖子,但我仍然不知道如何通过这个数组来做到这一点。

这个怎么样?

const char* s[] = { "car", "sun", "surprise", "asteriks", "alpha", "apple" };
std::map<char, std::set<std::string>> myMap;

for (auto str : s)
    myMap[str[0]].insert(str);

// Result: {
//     'a' -> {"alpha", "apple", "asteriks"},
//     'c' -> {"car"},
//     's' -> {"sun", "surprise"}
// }