我在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;
}
答案 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循环,因为我们已经为您完成了循环操作。
如果你真的想保留你的矢量,那么你每次都不能轻易添加一个新项目;但找到旧条目(如果存在)并修改它。