C ++将值更改为结构数据中int向量的元素

时间:2018-01-23 12:12:19

标签: c++

我在c ++中有结构数据:

struct Items
{
    string name;  // car, bike
    int quantity; // 1  , 10
};

我必须修改包含所有数据的指定矢量:

vector<Items> vectorName;

(必须在代码中使用此向量,我想知道如何修改它!)

现在让我们说汽车的数量是= 1。 如何添加一个项目车的统一,以便我的矢量有car = 2?

我尝试了一个循环,但它只在循环内部工作,如果我想在两个不同的时间添加另一辆车(添加1辆汽车[所以汽车= 2],添加1辆汽车[car = 3]) ,它从汽车= 1开始(所以汽车= 2)。

我的循环示例:

for (auto& i : vectorName)

    if (i.name == "car") {

        i.quantity += 1;

    }

2 个答案:

答案 0 :(得分:4)

考虑重构

std::map<std::string/*name*/, unsigned/*quantity*/> items;

然后要增加数量,比如"car"加1,你可以写

++items["car"];

如果std::map尚未在容器中(foo运算符的一个好奇心[]),此外值为零初始化为0.

最后,如果您想输出库存,可以使用

std::map

这将以词汇方式输出项目。使用这个答案的方法增加了猜想,至少在我看来,一种比C ++更具表现力的语言尚未出现。

答案 1 :(得分:1)

枚举的概念是在代码中给出整数的字符串表示。

enum ObjectType {
    Car,
    Bike
    Bus
};

在这种情况下,Car将被替换为整数值0;自行车1;巴士2。

地图的概念是允许单个键具有单个值。 因此将它们结合起来:

std::map<ObjectType, int> myThings;
myThings[Car] += 2;

这将确保您只有一辆Car(从而防止您意外重置为0)并删除您的for循环,因为我们已经为您完成了循环操作。

如果你真的想保留你的矢量,那么你每次都不能轻易添加一个新项目;但找到旧条目(如果存在)并修改它。