gpt4 book ai didi

c++ - 计算二维 vector C++ 中的结构元素

转载 作者:太空宇宙 更新时间:2023-11-03 10:40:23 25 4
gpt4 key购买 nike

我有一个这种类型结构的二维 vector

typedef struct box
{
int boxVal;
char boxTakenBy;
} box;

我将 myvector 定义为:

vector<vector<box> > myvector(10,vector<box>(10))

我的目标是使用 boxTakenBy == 'X' 计算元素的数量。我试过:

int mycount =  std::count_if( myvector.begin(), myvector.end(),
[](const box &p ) { return p.boxTakenBy == 'X'; });

我遇到编译错误:

no match for call to ‘<lambda(const box&)>) (std::vector<box >&)

不确定我的方法是错误的还是语法错误。如果您发现任何语法问题或建议是否有更好的方法,请更正。

最佳答案

hauron 所述myvector 的元素不是 box es 但是 vector<box>秒。所以你需要做的是迭代 myvector 的 2 个维度.

你可以结合 std::accumulate (累加总和)和 std::count_if (计算满足您的条件(== 'X')的内部元素以实现这样的目标:

#include <vector>
#include <algorithm>
#include <iostream>
#include <numeric>

struct box
{
int boxVal;
char boxTakenBy;
};

int main(){
using namespace std;
vector<vector<box> > myvector(10, vector<box>(10));

myvector[0][0].boxTakenBy = 'X';
myvector[2][0].boxTakenBy = 'X';
myvector[2][7].boxTakenBy = 'X';
myvector[5][7].boxTakenBy = 's';

int total_count = std::accumulate(myvector.begin(), myvector.end(), 0,
[](int acc, const vector<box>& curr)
{
return acc + std::count_if(curr.begin(), curr.end(),
[](const box& b ) { return b.boxTakenBy == 'X'; });
}
);

std::cout << total_count << '\n';
}

LIVE DEMO

关于c++ - 计算二维 vector C++ 中的结构元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40150760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com