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

  • BroadCity

    BroadCity

    10 ŞUBAT 2010
  • Elliot Davin

    Elliot Davin

    28 Kasım 2008
  • paikimchung

    paikimchung

    12 Mayıs 2006