SORU
11 Kasım 2010, PERŞEMBE


Std bir anahtar olarak char* kullanarak::göster

Ben anlamaya çalışıyorum neden aşağıdaki kod çalışmıyor, ve ben olduğunu düşünüyorum bir sorun ile kullanarak char* anahtar türü, ancak emin değilim nasıl yapabilirim çözmek ya da neden meydana gelmesidir. Ben (HL2 SDK) std::string char* kullanım tüm diğer işlevleri gereksiz zorluklar bir sürü neden oluyor.

std::map<char*, int> g_PlayerNames;

int PlayerManager::CreateFakePlayer()
{
    FakePlayer *player = new FakePlayer();
    int index = g_FakePlayers.AddToTail(player);

    bool foundName = false;

    // Iterate through Player Names and find an Unused one
    for(std::map<char*,int>::iterator it = g_PlayerNames.begin(); it != g_PlayerNames.end();   it)
    {
        if(it->second == NAME_AVAILABLE)
        {
            // We found an Available Name. Mark as Unavailable and move it to the end of the list
            foundName = true;
            g_FakePlayers.Element(index)->name = it->first;

            g_PlayerNames.insert(std::pair<char*, int>(it->first, NAME_UNAVAILABLE));
            g_PlayerNames.erase(it); // Remove name since we added it to the end of the list

            break;
        }
    }

    // If we can't find a usable name, just user 'player'
    if(!foundName)
    {
        g_FakePlayers.Element(index)->name = "player";
    }

    g_FakePlayers.Element(index)->connectTime = time(NULL);
    g_FakePlayers.Element(index)->score = 0;

    return index;
}

CEVAP
11 Kasım 2010, PERŞEMBE


Karşılaştırma char* pointer dize karşılaştırma harita aksi functor vermek gerekir. Genel olarak, bu bir işaretçi olarak göster anahtarı istediğin zaman böyledir.

yani.

struct cmp_str
{
   bool operator()(char const *a, char const *b)
   {
      return std::strcmp(a, b) < 0;
   }
};

map<char *, int, cmp_str> BlahBlah;

Not: Aslında benim düzenleme dikkate almayın, eşleme kullanımı daha kolay. EDİT:

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • KarnasCamillo

    KarnasCamill

    24 EKİM 2007
  • Michael Lummio

    Michael Lumm

    25 Mayıs 2007
  • UlyssesForever's channel

    UlyssesForev

    28 ŞUBAT 2012