С пояснениями в комментариях к вопросу это относительно просто, поскольку вы не храните группы взаимных синонимов, а скорее отдельно определяете приемлемые синонимы для каждого слова. Очевидным контейнером является либо:
std::map<std::string, std::set<std::string> >
или
std::multi_map<std::string, std::string>
если вас не волнует вставка дубликатов, например:
myDic.Add("car", "automobile");
myDic.Add("car", "auto");
myDic.Add("car", "automobile");
В случае multi_map
используйте функцию-член equal_range
, чтобы извлечь синонимы для каждого слова, например, так:
struct Dictionary {
vector<string> ListOSyns(const string &key) const {
typedef multi_map<string, string>::const_iterator constit;
pair<constit, constit> x = innermap.equal_range(key);
vector<string> retval(x.first, x.second);
retval.push_back(key);
return retval;
}
};
Наконец, если вы предпочитаете структуру, подобную хеш-таблице, древовидной структуре, тогда unordered_multimap
может быть доступно в вашей реализации C ++, и в основном работает тот же код.