我正在编写一个程序,从文件中读取团队名称并将它们分成组。每组4号。我使用的是:
map<int, set<string> > groups
假设团队名称是国家/地区名称。 现在将所有球队名称输入到resp中。小组我想打印每组的内容,这就是我被卡住的地方。
这是我到目前为止编写的完整工作代码。
#include<iostream>
#include<vector>
#include<ctime>
#include<cstdlib>
#include<algorithm>
#include<map>
#include<set>
using namespace std;
void form_groups(vector<string>);
int main(){
srand(unsigned(time(NULL)));
string team_name;
vector<string> teams;
while (cin >> team_name)
{
teams.push_back(team_name);
}
random_shuffle(teams.begin(), teams.end());
form_groups(teams);
}
void form_groups(vector<string> teams)
{
map<int, set<string> > groups;
map<int, set<string> >::iterator it;
string curr_item;
int curr_group = 1;
int count = 0;
for(int i = 0; i < teams.size(); i++)
{
curr_item = teams.at(i);
count++;
if(count == 4)
{
curr_group += 1;
count = 0;
}
groups[curr_group].insert(curr_item);
}
cout << curr_group << endl;
for(it = groups.begin(); it != groups.end(); ++it)
{
}
}
答案 0 :(得分:2)
你的方法很好。使用map<int, set<string> >::iterator it
,您可以使用<key,value>
和it->first
访问给定的it->second
对。由于set<string>
本身就是标准容器,因此您可以使用set<string>::iterator
遍历元素:
map<int, set<string> >::iterator map_it;
set<string>::iterator set_it
for(map_it = groups.begin(); map_it != groups.end(); ++map_it){
cout << "Group " << it->first << ": ";
for(set_it = map_it->second.begin(); set_it != map_it->second.end(); ++set_it)
cout << *set_it << " ";
cout << endl;
}
答案 1 :(得分:1)
在迭代std::map<..>
时,it->first
会为您提供密钥,it->second
会为您提供相应的值。
你需要这样的东西迭代地图:
for(it = groups.begin(); it != groups.end(); ++it)
{
cout<<"For group: "<<it->first<<": {"; //it->first gives you the key of the map.
//it->second is the value -- the set. Iterate over it.
for (set<string>::iterator it2=it->second.begin(); it2!=it->second.end(); it2++)
cout<<*it2<<endl;
cout<<"}\n";
}
答案 2 :(得分:1)
我认为这是groups
map
的迭代,这是你的难点。迭代map
:
for (it = groups.begin(); it != groups.end(); it++)
{
// 'it->first' is the 'int' of the map entry (the key)
//
cout << "Group " << it->first << "\n";
// 'it->second' is the 'set<string>' of the map entry (the value)
//
for (set<string>::iterator name_it = it->second.begin();
name_it != it->second.end();
name_it++)
{
cout << " " << *name_it << "\n";
}
}