通过对象矢量排序并创建子向量

时间:2012-01-04 16:42:12

标签: c++ vector map

我刚刚删除了一个类似问题的早期帖子,因为我的例子不太清楚,所以我再试一次。

我创建了一个名为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指针或函数指针的编译器错误。不知道我需要什么,因为它创建了所有矢量索引的蓝色打印。我想要一些可以推送的东西 - 如果可能的话,有人也建议使用地图或多地图,但我不太了解它

由于

1 个答案:

答案 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。