SORU
30 HAZİRAN 2009, Salı


Nasıl STL haritası C dizeleri tam üzerinde yineleme

Aşağıdaki sorunu dizeleri std kullanılarak tanımlanan ilişkilendirilebilir bir dizi üzerinden yineleme ile ilgili::göster.

-- snip --
class something 
{
//...
   private:
      std::map<std::string, std::string> table;
//...
}

Kurucu ben dize anahtarları dize veri için ilişkili çiftleri ile tablo doldurmak. Başka bir yöntem, tüm anahtarları ve ilişkili verileri içeren bir dize nesne tablosunda bulunan döner nesnesi olabilirdi var(gibi anahtar=veri biçimi).

std::string something::toString() 
{
        std::map<std::string, std::string>::iterator iter;
        std::string* strToReturn = new std::string("");

        for (iter = table.begin(); iter != table.end(); iter  ) {
           strToReturn->append(iter->first());
           strToReturn->append('=');
           strToRetunr->append(iter->second());
           //....
        }
       //...
}

Derlemeye çalıştığım zaman şu olsun

hata: "hata: arama için bir maç için (:: basic_string, std std::ayırıcı >‘ ) ()". ’

Biri bana neyin eksik olduğunu, neyi yanlış yaptığımı açıklayabilir mi? Ben sadece kullanıcı std ile hash_map kullanabilmek için bir karma işlev tanımlamak için bulunduğu hash_map durumunda benzer bir sorun hakkında bazı tartışmalar bulundu::string nesneleri. Bir de benim durumumda benzer olabilir mi?

Teşekkür ederim!

CEVAP
1 Temmuz 2009, ÇARŞAMBA


Senin asıl sorun yineleyici bir yöntem first() adlı aradığınız olmasıdır. Yapmak istediğin ne özelliği first denilen kullanın

...append(iter->first) rather than ...append(iter->first())

Tarz meselesi olarak, new dize oluşturmak için kullanıyor olmanız gerekmiyor.

std::string something::toString() 
{
        std::map<std::string, std::string>::iterator iter;
        std::string strToReturn; //This is no longer on the heap

        for (iter = table.begin(); iter != table.end();   iter) {
           strToReturn.append(iter->first); //Not a method call
           strToReturn.append("=");
           strToReturn.append(iter->second);
           //....
           // Make sure you don't modify table here or the iterators will not work as you expect
        }
        //...
        return strToReturn;
}

düzenleme:facildelembrar modern C şimdi döngü yeniden yazabilirsiniz (yorum) dikkat çekti

for (auto& item: table) {
    ...
}

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • girleffect

    girleffect

    20 Mayıs 2008
  • Le Cargo !

    Le Cargo !

    24 HAZİRAN 2007
  • PhoneBuff

    PhoneBuff

    10 HAZİRAN 2011