我是 C++ 新手,这里可能缺少一些非常基本的东西,但我正在尝试创建 vector 的 vector
#include <iostream>
#include <stack>
#include <string>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs)
{
vector<vector<string>> result;
map<string,vector<string>> myMap;
if(strs.size() == 0)
{
return result;
}
for(string s : strs)
{
string temp = s;
sort(temp.begin(),temp.end());
auto it = myMap.find(temp);
if(it != myMap.end())
{
it->second.push_back(s);
}
else
{
vector<string> newVector;
newVector.push_back(s);
myMap.insert(pair<string,vector<string>>(temp,newVector));
result.push_back(newVector);
}
}
cout<< myMap["abt"].size() <<endl;
return result;
}
};
int main(int argc, const char * argv[])
{
Solution mySolution;
vector<string> myStrings {"eat", "tea", "tan", "ate", "nat", "bat"};
auto result = mySolution.groupAnagrams(myStrings);
for(vector<string> v: result)
{
//cout << v.size() << endl;
for(string s: v)
{
cout << s << " ";
}
cout << endl;
}
return 0;
}
我期待这样的输出
[
["ate", "eat","tea"],
["nat","tan"],
["bat"]
]
当我尝试在 main() 中打印 vector 的 vector 时,我得到的所有 vector 的大小均为 1。
当我打印 map 中 vector 的大小时,这些大小对我来说看起来不错。我在这里缺少什么?
更新 -
通过以下更改修复了该问题
for(string s : strs)
{
string temp = s;
sort(temp.begin(),temp.end());
auto it = myMap.find(temp);
if(it != myMap.end())
{
it->second.push_back(s);
}
else
{
vector<string> newVector;
newVector.push_back(s);
myMap.insert(pair<string,vector<string>>(temp,newVector));
}
}
for(auto it: myMap)
{
result.push_back(it.second);
}
我仍然有兴趣知道是否有一种方法可以避免最终循环遍历 map 并实现我最初打算做的事情?
最佳答案
就是这部分:
{
vector<string> newVector;
newVector.push_back(s);
myMap.insert(pair<string,vector<string>>(temp,newVector));
result.push_back(newVector);
}
每次 result
都会被赋予一个包含一个元素的新 vector 。更改 map vector 而不是 vector 的 vector 的原因是因为 vector::push_back
每次都会创建一个拷贝。
要解决这个问题,有两种方法。
- 您可以尝试在更新 map 的同时更新结果,并获取 vector 来存储对 map 拷贝的一些引用。
- 由于您不使用
result
进行处理步骤,而仅使用结果,因此您可以在完成 map 后编译 vector 。
我更喜欢方法#2,因为你永远不会返回 map 本身。此外,从一种容器类型转换为另一种容器类型是一门艺术,例如 this question给出了有关所涉及内容的一些想法。
关于c++ - C++ 中 vector 的 vector 的使用 & push_back( ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38366135/