在二维哈希映射C ++上的操作

时间:2015-06-05 20:49:26

标签: c++ hashmap

我目前正在编写一个编码问题:

给定一个字符串数组,返回所有字符串组,即字谜。

例如,鉴于:

{asch, scah, bva, vba, soa}

返回

{ {asch, scah}, {bva, vba}, {soa}}

要解决这个问题少于O(n ^ 2)的时间,我们首先应该对每个单词进行排序,并将排序的单词分组在一个集合中,如果排序的单词是相同的。

我想使用二维hashmap。

map<string, map<int,string>> container;

使用这个二维hashmap,第一个键是排序单词,第二个键是原始序列中的索引,值是原始单词。

for(int i=0; i<sequence.size();i++)
{
    string original_word = sequence[i];
    string sorted_word = original_word;
    sort(sorted_word.begin(),sorted_word.end());
    container[sorted_word][i] = original_word;

}

在这个循环之后,我相信所有必须具有相同sorted_word的字谜将被分组到第一级hashmap中。

我的问题是,如何编写代码以获取具有相同sorted_word的集合?

我可以吗

for( iterator itr = container.begin(); itr != container.end(); itr++)
{
     auto grouped_words = itr.second(); // what is the data type of grouped_word here?
}

如果有任何错误,请纠正我。感谢。

1 个答案:

答案 0 :(得分:1)

我觉得这里有一个错误:

vector<string, vector<int,string>> container;  // ???

在你的问题中,你谈到哈希映射,我想你的意思是:

unordered_map<string, unordered_map<int,string>> container;

在这种情况下,您可以按如下方式使用结果:

for( auto itr = container.begin(); itr != container.end(); itr++)
    {
        auto &grouped_words = itr->second; // prefer a reference
        cout << itr->first<<": "; 
        for (auto &x : grouped_words) {
            cout << "\t" << x.first << ":"<< x.second<<endl; 
        }
    }

这是live demo

修改grouped_words是(此处)对unordered_map<int, string>的引用