dlatego zamiast set list czy vector mapa jest najlepsza do zarządzania Bricksami:
drobny przykład jakby to miało wyglądać:
#include <iostream>
#include <map>
class Brick
{
public:
Brick(int id, bool destructable) : id_(id), destructable_(destructable)
{}
bool isDestructable() { return destructable_; }
private:
int id_;
bool destructable_;
};
using id = int;
using bricks = std::map<id, Brick>;
void collisionWithObjectId(bricks& bricksMap, int id)
{
auto it = bricksMap.find(id);
if(it != std::end(bricksMap)) {
if(it->second.isDestructable()) {
bricksMap.erase(it);
std::cout << "Brick " << id << " has been destroyed.\n";
} else {
std::cout << "Brick " << id << " can't be destroyed.\n";
}
} else {
std::cout << "Error -> no such brick id -> " << id << std::endl;
}
}
int main()
{
bricks bricksMap;
bricksMap.emplace(0, Brick(0, true));
bricksMap.emplace(1, Brick(1, false));
bricksMap.emplace(2, Brick(2, true));
bricksMap.emplace(3, Brick(3, false));
collisionWithObjectId(bricksMap, 2);
collisionWithObjectId(bricksMap, 3);
collisionWithObjectId(bricksMap, 0);
collisionWithObjectId(bricksMap, 5);
collisionWithObjectId(bricksMap, 1);
std::cout << "Bricks count that left: " << bricksMap.size();
return 0;
}
http://melpon.org/wandbox/permlink/Xe0lVTjG4Nu7VSDC
naturalnie możnaby opakować mapę i funkcje w jakąś inną klasę to zarządzania tym bajzlem i zrobić z Brick unique_ptr'y