Используйте команду цвета. Легкий и встроенный.
Color 0F
Черно-белый
Color 0A
Черный и зеленый
it = std::find_if(bot.monsters.begin(), bot.monsters.end(),
boost::bind(&monster::id, _1) == currentMonster);
Или запись Ваш собственный функциональный объект, если у Вас нет повышения. Был бы похож на это
struct find_id : std::unary_function<monster, bool> {
DWORD id;
find_id(DWORD id):id(id) { }
bool operator()(monster const& m) const {
return m.id == id;
}
};
it = std::find_if(bot.monsters.begin(), bot.monsters.end(),
find_id(currentMonster));
Необходимо записать собственный поисковый предикат:
struct find_monster
{
DWORD id;
find_monster(DWORD id) : id(id) {}
bool operator () ( const monster& m ) const
{
return m.id == id;
}
};
it = std::find_if( monsters.begin(), monsters.end(), find_monster(monsterID));
Смотрите на эти std::find
шаблон, третий параметр особенно:
template<class InputIterator, class EqualityComparable>
InputIterator find(InputIterator first, InputIterator last,
const EqualityComparable& value);
, Каков этот EqualityComparable? Снова из документации:
A type is EqualityComparable if objects of that type can be
compared for equality using operator==, and if operator== is
an equivalence relation.
Теперь, Ваш монстр типа должен определить такой оператор. Если Вы не делаете компилятор генерирует один для Вас (равно как и значение по умолчанию ctor и dtor), который делает memcmp
вид вещи, которая не работает в Вашем случае. Так, для использования std::find
первый определяют функцию/функтор компаратора, которую алгоритм может использовать для соответствия Вашему currentMonster
т.е. что-то вроде:
struct monster {
// members
bool operator==(const monster& l, const monster& r) const
{
return l.id == r.id;
}
};
Можно записать функцию как указано ниже:
monster* findMonster(DWORD currentMonster) {
for (auto it = bot.monsters.begin(); it != bot.monsters.end(); it++) {
if (it->id == currentMonster) {
return &(*it);
}
}
return NULL;
}
Это возвращает указатель на сохраненный узел, если это найдено в векторе, иначе ПУСТОЙ УКАЗАТЕЛЬ возвратов.
Обратите внимание на то, что return it;
не будет работать непосредственно.
] как насчет:[
] [std::find_if(monsters.begin(),
monsters.end(),
[&cm = currentMonster]
(const monster& m) -> bool { return cm == m; });
] или поместите монстров на карту вместо вектора
, или если они должны быть в векторе, создайте карту индекса, то есть карту идентификатора в индекс вектора