二维哈希映射的操作
operation on 2 dimensional hash map C++
我目前正在研究一个编码问题:
给定一个字符串数组,返回所有为字谜的字符串组
例如:
{asch, scah, bva, vba, soa}
返回{ {asch, scah}, {bva, vba}, {soa}}
为了在小于O(n^2)的时间内解决这个问题,我们应该首先对每个单词进行排序,如果排序的单词相同,则将排序的单词分组在一个集合中。
我想使用二维hashmap。
map<string, map<int,string>> container;
使用这个二维哈希映射,第一个键是排序后的单词,第二个键是它在原始序列中的索引,值是原始单词。
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?
}
如有不妥之处请指正。谢谢。 我想这里有一个错误:
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;
}
}
这里有一个现场演示。
Edit: grouped_words
(这里)是对unordered_map<int, string>
的引用
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 为什么在popback()操作之后,它仍然打印完整的矢量
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 将函数类成员映射到类本身内部
- 重载操作程序时出错>>用于类中的字符串 memebr
- 如何在 C# 中映射双 C 结构指针?
- 如何在C++中使用结构生成映射
- 使用std::函数映射对象方法
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- 将操作名称映射到 C++ 中的类类型
- C++将矩阵列映射到秩 - 位操作
- std::按值或指针映射操作
- 使用指向 STL 映射的指针的操作
- 映射平台特定的可互操作类型
- 使用结构作为映射的键和值.find() 操作给出错误
- 如何实现可变元组映射操作
- C++通过引用传递嵌套的无序映射并对其进行操作
- C++映射键/迭代器操作
- 是否存在STL或BOOST映射,如查找和弹出操作的容器
- 二维哈希映射的操作