Я предполагаю, что vector<string> Champions
является vector<CHAMPION>
, потому что в противном случае целое getChampIndex
не имеет смысла.
Вы можете использовать указатель на элемент, чтобы передать члену в getChampIndex
.
#include <vector>
#include <algorithm>
static constexpr int EMPTY = -1;
struct CHAMPION{
int champ_ID;
int weaponL_ID;
int weaponR_ID;
};
typedef int CHAMPION::*FieldPointer;
std::vector<CHAMPION> Champions;
std::vector<CHAMPION>::size_type getChampIndex(FieldPointer field, int value){
auto const i = std::find_if(Champions.begin(), Champions.end(), [&](auto const& c) {return (c.*field) == value;});
// what do we do if there is no element with searched value?
return i - Champions.begin();
}
int main(int argc, char* argv[]) {
//fill Champions vector
auto SearchedChamp = getChampIndex(&CHAMPION::champ_ID, 17);
//process SearchedChamp
auto NoWeaponL = getChampIndex(&CHAMPION::weaponL_ID, EMPTY);
//process NoWeaponL
auto NoWeaponR = getChampIndex(&CHAMPION::weaponR_ID, EMPTY);
//process NoWeaponR
}
Я думаю, что конструкция самой структуры не очень хорошо подходит, но это трудно судить по описанию проблемы. Если вам нужно придерживаться дизайна, я бы, вероятно, не использовал эту технику и просто пошел с лямбда-функциями:
template<typename Predicate>
std::vector<CHAMPION>::size_type getChampIndex(Predicate pred){
auto const i = std::find_if(Champions.begin(), Champions.end(), pred);
return i - Champions.begin();
}
int main(int argc, char* argv[]) {
//fill Champions vector
auto SearchedChamp = getChampIndex([](CHAMPION const& c) {return c.champ_ID == 17; });
//process SearchedChamp
auto NoWeaponL = getChampIndex([](CHAMPION const& c) {return c.weaponL_ID == EMPTY;});
//process NoWeaponL
auto NoWeaponR = getChampIndex([](CHAMPION const& c) {return c.weaponR_ID == EMPTY;});
//process NoWeaponR
}
Поиск вопросов по поиску элементов в векторе. – juanchopanza
Предоставленный код (псевдо) не имеет никакого смысла. – Arunmu
Вопрос очень плохо написан. Но, похоже, вы пытаетесь получить доступ к отдельным членам структуры. Если это так, есть способ. – zeb