SORU
8 Temmuz 2009, ÇARŞAMBA


Bir std::o ekleme sırasını takip göster?

Ben şu anda benzersiz bir dize tanımlayıcısı için std::map<std::string,int> depolayan bir tam sayı değeri vardır, ve dize ile bakmak istiyorum. İstediğim dışında ekleme sırasını takip etmez çoğunlukla. Harita çıkış değerleri yazdırmak için yineleme, dize göre sıralanır; ama onları (ilk) ekleme sırasına göre sıralanmış olmasını istiyorum.

vector<pair<string,int>> bir yerine kullanma hakkında düşündüm, ama bir tamsayı vektörü önemli ölçüde daha yavaş olup olmayacağını bilmiyorum yani yaklaşık 10,000,000 kere değerleri, string ve artışı göz kulak olman lazım.

Orada std kullanmanın bir yolu::göster ya da benim daha iyi ihtiyacı uygun bir std kap var mı?

[GCC 3.4, ve muhtemelen benim std değerleri P'den fazla çift var ben::göster].

CEVAP
8 Temmuz 2009, ÇARŞAMBA


Eğer std sadece 50 değerleri varsa onları std kopyalama göster::baskı ve sıralama ile std önce vektör::uygun functor kullanarak sıralayın.

Veya boost::multi_index kullanabilirsiniz. Bazı dizinler kullanmak için izin verir. Senin durumunda aşağıdaki gibi görünebilir:

struct value_t {
      string s;
      int    i;
};
struct string_tag {};
typedef multi_index_container<
    value_t,
    indexed_by<
        random_access<>, // this index represents insertion order
        hashed_unique< tag<string_tag>, member<value_t, string, &value_t::s> >
    >
> values_t;

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Hak5

    Hak5

    7 EYLÜL 2005
  • Matt Stokes

    Matt Stokes

    22 Ocak 2008
  • Soulkiller13 ツ

    Soulkiller13

    30 Mayıs 2013