#include <iostream>
#include <vector>
#include <list>
#include <deque>
#include <map>
#include <set>
#include<algorithm>
using namespace std;
enum class Rarity {
Common,
Rare,
Unique,
};
enum class ItemType {
None,
Armor,
Weapon,
Jewelry,
Consumale,
};
class Item {
public:
Item(){}
Item(int itemId, Rarity rarity,ItemType itemType):_itemId(itemId),_rarity(rarity),_itemType(itemType){}
public:
int _itemId = 0;
Rarity _rarity = Rarity::Common;
ItemType _itemType=ItemType::None;
};
int main()
{
vector<Item> v;
v.push_back(Item(1, Rarity::Common, ItemType::Weapon));
v.push_back(Item(2, Rarity::Common, ItemType::Armor));
v.push_back(Item(3, Rarity::Rare, ItemType::Jewelry));
v.push_back(Item(4, Rarity::Unique, ItemType::Weapon));
{
struct IsUniqueItem
{
bool operator()(Item& item) {
return item._rarity == Rarity::Unique;
}
};
auto findIt = std::find_if(v.begin(), v.end(),IsUniqueItem());
if (findIt != v.end()) {
cout << "아이템ID: " << findIt->_itemId << endl;
}
else {
cout << "못찾음" << endl;
}
auto IsUniqueLambda = [](Item& item) {
return item._rarity == Rarity::Unique;
};
auto findIt2 = std::find_if(v.begin(), v.end(), IsUniqueLambda);
auto findIt3 = std::find_if(v.begin(), v.end(), [](Item& item) { return item._rarity == Rarity::Unique;});
if (findIt3 != v.end()) {
cout << "아이템ID: " << findIt3->_itemId << endl;
}
else {
cout << "못찾음" << endl;
}
}
{
struct FindItemByItemId
{
FindItemByItemId(int itemId):_itemId(itemId) {
}
bool operator()(Item& item) {
return item._itemId == _itemId;
}
int _itemId;
};
int itemId = 4;
auto findIt = std::find_if(v.begin(), v.end(), FindItemByItemId(itemId));
if (findIt != v.end()) {
cout << "아이템ID: " << findIt->_itemId << endl;
}
else {
cout << "못찾음" << endl;
}
auto FindItemByItemIdByLambda = [&](Item& item) {
return item._itemId == itemId;
};
itemId = 2;
auto findIt2 = std::find_if(v.begin(), v.end(), FindItemByItemIdByLambda);
auto findIt3 = std::find_if(v.begin(), v.end(), [&](Item& item) {
return item._itemId == itemId;
});
if (findIt3 != v.end()) {
cout << "아이템ID: " << findIt3->_itemId << endl;
}
else {
cout << "못찾음" << endl;
}
}
{
struct FindItem
{
FindItem(int itemId,Rarity rarity, ItemType type) :_itemId(itemId),_rarity(rarity),_itemType(type) {
}
bool operator()(Item& item) {
return item._itemId == _itemId&&item._rarity==_rarity&&item._itemType==_itemType;
}
int _itemId;
Rarity _rarity;
ItemType _itemType;
};
int itemId = 4;
Rarity rarity=Rarity::Unique;
ItemType itemType=ItemType::Weapon;
auto findIt = std::find_if(v.begin(), v.end(), FindItem(itemId, Rarity::Unique, ItemType::Weapon));
if (findIt != v.end()) {
cout << "아이템ID: " << findIt->_itemId << endl;
}
else {
cout << "못찾음" << endl;
}
auto FindItemByLambda = [=](Item& item) {
return item._itemId == itemId;
};
auto findIt2 = std::find_if(v.begin(), v.end(), FindItemByLambda);
auto findIt3 = std::find_if(v.begin(), v.end(), [&itemId,rarity,itemType](Item& item) {
return item._itemId == itemId && item._rarity == rarity && item._itemType == itemType;
});
if (findIt3 != v.end()) {
cout << "아이템ID: " << findIt3->_itemId << endl;
}
else {
cout << "못찾음" << endl;
}
}
{
class Knight {
public:
auto ResetHpJob() {
auto f = [this]() {
this->_hp = 200;
};
return f;
}
public:
int _hp = 100;
};
class Functor {
public:
Functor(Knight* k) :_knight(k) {
}
void operator()() {
_knight->_hp = 200;
}
public:
Knight* _knight;
};
Knight* k = new Knight();
auto job = k->ResetHpJob();
delete k;
job;
}
return 0;
}