我刚刚删除了一个类似问题的早期帖子,因为我的例子不太清楚,所以我再试一次。
我创建了一个名为SportsSchedules.cpp的简单类。该类存储了4个项目; sportType,TeamName,城市和胜利数量。我创建了SportsSchedules对象的“运动矢量”。我想通过循环运行sportsVector,对于每种运动类型,我想创建一个新的矢量。每个创建的子矢量应仅包含唯一的sportType。
理想情况下,这个sportsVector会循环运行并将每个对象弹出到其repsective subVector中,直到它为空(我猜)
以下是我的主要代码:
#include <iostream>
#include "SportsSchedules.h"
#include <vector>
#include <string>
#include <map>
#include <algorithm>
#include <functional>
bool sportType( std::string type);
int main (int argc, const char * argv[])
{
SportsSchedules *theSport;
theSport = new SportsSchedules("Football", "Chicago", "Bears", 7);
std::vector<SportsSchedules*> *sportsVector = new std::vector<SportsSchedules*>();
sportsVector->push_back(theSport);
theSport = NULL;
theSport = new SportsSchedules("Football", "Chicago", "Bears", 7);
sportsVector->push_back(theSport);
theSport = NULL;
theSport = new SportsSchedules("Baseball", "Boston", "RedSox", 62);
sportsVector->push_back(theSport);
theSport = NULL;
theSport = new SportsSchedules("Football", "GreenBay", "Packers", 15);
sportsVector->push_back(theSport);
theSport = NULL;
theSport = new SportsSchedules("Basketball", "Portland", "Trailblazers", 60);
sportsVector->push_back(theSport);
theSport = NULL;
theSport = new SportsSchedules("Football", "Seattle", "Seahawks", 7);
sportsVector->push_back(theSport);
theSport = NULL;
theSport = new SportsSchedules("Baseball", "Oakland", "A's", 67);
sportsVector->push_back(theSport);
std::cout<<"Test the SportsSchedules Vector "<<std::endl;
std::vector<SportsSchedules*>::iterator itr;
for(itr = sportsVector->begin(); itr != sportsVector->end(); ++itr ){
std::cout<<(*itr)->getSportType()<<" "<<(*itr)->getCity()<<" "<<(*itr)->getTeamName()<<" "
<<(*itr)->getNumWins()<<std::endl;
}
return 0;
}
bool trackType( std::string type){
SportsSchedules * sptPtr;
if(sptPtr->getSportType()== type)
return true;
else
return false;
}
bool函数来自之前尝试remove_copy_if的尝试。我一直收到关于没有int指针或函数指针的编译器错误。不知道我需要什么,因为它创建了所有矢量索引的蓝色打印。我想要一些可以推送的东西 - 如果可能的话,有人也建议使用地图或多地图,但我不太了解它
由于
答案 0 :(得分:1)
有人建议您使用地图,因为它们是关联容器。 IE浏览器。而不是使用位置索引(0,1,2,...)查找某个值,而是使用任意值查找,例如,可以是字符串。
那么,它对你有什么用呢?见这个例子:
#include <map>
#include <string>
#include <vector>
#include <iostream>
int main() {
std::map< std::string, std::vector<SportsSchedules*> > uniques;
// Initialization code here...
std::vector<SportsSchedules*>::iterator itr;
for(itr = sportsVector->begin(); itr != sportsVector->end(); ++itr ) {
uniques[(*itr)->getSportType()].push_back((*itr));
}
return 0;
}
uniques[(*itr)->getSportType()]
从uniques
std::vector<SportsSchedules*>
检索(*itr)->getSportType()
的索引。如果地图中不存在该键(第一次在sportsVector
中看到该运动),它将在创建之前创建一个新的 - 否则,您将获得先前创建的向量。
要检索信息,您可以按名称查找信息:
std::vector<SportsSchedules*> vec = uniques["Football"];
或迭代它以获得(键,值)对。有关更多信息,请查看地图的API。