2012-05-02 49 views
1

可以说我有1个向量的名称和另一个向量的电话号码。首先,用户将输入姓名(不排序,意味着他们不是从a到z),然后,用户将输入相应的电话号码。维持向量的顺序

在填写完两个向量之后,程序会在名称向量(向量1)中执行排序机制。问题现在是矢量2(因为没有采用机制将其映射到矢量1)。

例子:

vector name | vector telephone 
f    232132 
a    34242342 
b    997345 

the result will be 

vector name | vector telephone 
a    232132 
b    34242342 
f    997345 

,你可以看到,矢量电话处理不当进行了调整。我们该如何调整呢?谢谢

+1

为什么不让事情变得简单一些,并有一个对象的矢量,每个对象同时包含名称和数字? –

+0

或将地图名称编号。 – chris

+0

地图会浪费资源。 – JustinDanielson

回答

5

创建一个结构,其中包含名称的字符串和电话号码的字符串/ int。线性查看并记录名称信息。再次浏览并记录手机号码信息。然后排序。

如果您不想创建课程,则可以使用pair对象。

vector<pair<string,int> > nameAndNumber; 

编辑:固定的一个错误,由于缩褶

+0

是否可以仅使用矢量(映射2矢量),而不使用结构或类? – WantIt

+0

如果你编写你自己的排序函数,你可以让它同时对两个向量进行排序,因为它对排名向量进行排序。但最好的办法是创建一个类或结构,将信息保存在同一个对象中。 – JustinDanielson

+1

OP没有指定C++ 11,因此可能需要将其更改为'vector > nameAndNumber;'以避免调用右移运算符。 – smocking

1

载体电话处理不当了调整。我们该如何调整呢?

通过在数据结构中结合实体“名称”和“电话”,然后使用它的vector

struct NameNumber { 
    std::string t_Name; 
    unsigned long t_Number; 

    bool operator < (const NameNumber&) const; // use 't_Name' inside 
}; 
std::vector<NameNumber> v; 

对于解决方案的完整性,我刚才提到的operator <将根据名称排序vector