私はどの出力を期待していますC++に新しいですし、ここでは非常に基本的な何かが足りないかもしれないが、私はベクトル使用)
#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;
}
のベクトルを作成しようとしています私がメインでベクトルのベクトルを()私は、マップ内のベクトルの大きさを印刷するとき、私は1
だけでなく、ベクトルの全てのサイズを取得する印刷しようとすると、この
[
["ate", "eat","tea"],
["nat","tan"],
["bat"]
]
のように見えます、サイズlo私には大丈夫です。私はここで何が欠けていますか?
UPDATE - 変更以下
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);
}
でそれを修正
私はまだ終わりでマップをループ回避する方法があるかどうかを知って興味があると私は当初意図した何かを達成するであろう何をする?
'for(string s:strs)'は 'strs'のすべての文字列のコピーを作成することに注意してください。 – kfsone
"...最後に地図をループするのを避ける方法がある場合" - 単にベクトル<ベクトルに入るときに間違っている(間違っている)のが簡単であるため、その方向では答えたくない&> 'テリトリー。私自身の使用であっても、参照型のコンテナを渡すことは避けようとします。これは、値を同時に生成して「外側」のスコープに渡すだけでは、不良なメモリ管理の原因になります。あなたはポインタを使うこともできます。なぜそれが危険なのかは明らかです。 –