#include <iostream>
#include <vector>
#include <list>
#include <string>
#include <utility>
#include <memory>
 
struct Person
{
  std::string name;
  std::vector<Person*> freunde;
};
 
struct Welt
{
  std::vector<std::unique_ptr<Person>> bewohner;
 
  Person* neuer_bewohner(std::string name);
};
 
Person* Welt::neuer_bewohner(std::string name)
{
  std::unique_ptr<Person> p (new Person);
  p->name = move(name);
  bewohner.push_back(move(p));
  return bewohner.back().get();
}
 
void befreunde(Person* wen, Person* mit)
{
  // TODO: ueberlegen, ob und wie man abfangen soll,
  // falls die zwei personen schon befreundet sind
  // oder ob wen==mit gilt.
  wen->freunde.push_back(mit);
  mit->freunde.push_back(wen);
}
 
int main()
{
  Welt w;
  Person* hans   = w.neuer_bewohner("Hans Wurst");
  Person* daniel = w.neuer_bewohner("Daniel Kaese");
  befreunde(hans,daniel);
} 
