排序通过对象向量和创建子向量
Sorting through an object vector and creating subvectors
我刚刚删除了一个类似的问题,因为我的例子不是很清楚,所以我再试一次。
我已经创建了一个简单的类SportsSchedules.cpp类存储4项;体育类型,球队名称,城市和胜利的数量。我已经创建了SportsSchedules对象的"运动向量"。我想通过循环运行sportsVector,并为每个运动类型创建一个新向量。每个创建的子向量应该只包含唯一的sportType。
理想情况下,这个sportsVector将在循环中运行,并将每个对象弹出到各自的子向量中,直到它为空(我猜)
下面是我的main代码:
#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指针或函数指针。不确定如果这是我需要的,因为它创建了所有矢量索引的蓝图。如果可能的话,我想要一些可以push - pop的东西,有人还建议使用map或multi map,但我不太理解它
谢谢
有人建议你使用映射,因为它们是关联容器。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
检索到(*itr)->getSportType()
值索引的std::vector<SportsSchedules*>
。如果这个键在地图上不存在(你第一次在sportsVector
中看到这个运动),它会先创建一个新的,否则,你会得到之前创建的向量。
要检索信息,一旦它在那里,你可以查找它的名称:
std::vector<SportsSchedules*> vec = uniques["Football"];
或对其进行迭代以获得(键,值)对。查看map的API获取更多信息
- 从具有自定义排序的向量创建集合
- 我正在寻找一种优雅的方式来从元组向量创建tuple_element向量
- 从类指针的向量创建成员变量的向量
- 从 c++ 中的字符串向量创建一个元组
- 如何在 c++ 中从两个向量创建 JSON 对象?
- 如何在不迭代的情况下从string_view向量创建字符串向量?
- 通过移动从两个向量创建元组向量
- 为结构的向量创建C 矢量迭代器
- C 矢量元素擦除与新向量创建
- 使用向量的向量创建一个尺寸
- C MultiSet从排序的向量创建
- 从向量<T>创建一组字符串
- 使用C 中的向量创建整数集类别
- 从两个原始向量创建一个“特征::矩阵”
- 用向量创建筛子
- 从Vectores的向量创建一个板
- C++内存管理:从函数中的向量创建一个新数组
- 正在使用类中的向量创建类
- 为向量创建临时变量
- 如何在c++中使用模板图类中的向量创建邻接矩阵