Aracılığıyla paylaş


CMap Sınıf

Benzersiz anahtarları değerlerle eşleyen bir sözlük koleksiyonu sınıfı.

Sözdizimi

template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>class CMap : public CObject

Parametreler

KEY
Eşlemenin anahtarı olarak kullanılan nesnenin sınıfı.

ARG_KEY
Bağımsız değişkenler için KEY kullanılan veri türü; genellikle başvurusu.KEY

VALUE
Eşlemede depolanan nesnenin sınıfı.

ARG_VALUE
Bağımsız değişkenler için VALUE kullanılan veri türü; genellikle başvurusu.VALUE

Üyeler

Genel Yapılar

Veri Akışı Adı Açıklama
CMap::CPair Bir anahtar değeri ve ilişkili nesnenin değerini içeren iç içe yerleştirilmiş bir yapı.

Ortak Oluşturucular

Veri Akışı Adı Açıklama
CMap::CMap Anahtarları değerlerle eşleyen bir koleksiyon oluşturur.

Genel Yöntemler

Veri Akışı Adı Açıklama
CMap::GetCount Bu haritadaki öğe sayısını döndürür.
CMap::GetHashTableSize Karma tablodaki öğe sayısını döndürür.
CMap::GetNextAssoc Yineleme için sonraki öğeyi alır.
CMap::GetSize Bu haritadaki öğe sayısını döndürür.
CMap::GetStartPosition İlk öğenin konumunu döndürür.
CMap::InitHashTable Karma tabloyu başlatır ve boyutunu belirtir.
CMap::IsEmpty Boş eşleme koşulu (öğe yok) için testler.
CMap::Lookup Belirli bir anahtara eşlenen değeri arar.
CMap::PGetFirstAssoc İlk öğeye bir işaretçi döndürür.
CMap::PGetNextAssoc Yineleme için sonraki öğeye yönelik bir işaretçi alır.
CMap::PLookup Değeri belirtilen değerle eşleşen bir anahtara işaretçi döndürür.
CMap::RemoveAll Bu haritadan tüm öğeleri kaldırır.
CMap::RemoveKey Bir anahtar tarafından belirtilen bir öğeyi kaldırır.
CMap::SetAt Eşlem içine bir öğe ekler; eşleşen bir anahtar bulunursa mevcut bir öğeyi değiştirir.

Ortak İşleçler

Veri Akışı Adı Açıklama
CMap::operator [ ] Eşlemeye bir öğe ekler— için SetAtişleç değişimi.

Açıklamalar

Eşlem içine bir anahtar-değer çifti (öğe) ekledikten sonra, erişmek için anahtarı kullanarak çifti verimli bir şekilde alabilir veya silebilirsiniz. Ayrıca haritadaki tüm öğeleri yineleyebilirsiniz.

Girişlere alternatif erişim için türünde POSITION bir değişken kullanılır. Bir girdiyi "hatırlamak" ve haritada yinelemek için kullanabilirsiniz POSITION . Bu yinelemenin anahtar değerine göre sıralı olduğunu düşünebilirsiniz; Öyle değil. Alınan öğelerin dizisi belirsiz.

Bu sınıfın bazı üye işlevleri, sınıfın çoğu kullanımları CMap için özelleştirilmesi gereken genel yardımcı işlevleri çağırır. MFC Başvurusunun Makrolar ve GenelLer bölümündeki Koleksiyon Sınıfı Yardımcıları bölümüne bakın.

CMapCObject::Serialize öğelerinin seri hale getirilmesini ve dökümünü desteklemek için geçersiz kılar. Bir eşleme kullanılarak Serializebir arşive depolanıyorsa, her eşleme öğesi sırayla serileştirilir. Yardımcı işlevinin SerializeElements varsayılan uygulaması bit düzeyinde yazma işlemi yapar. veya diğer kullanıcı tanımlı türlerden CObject türetilen işaretçi koleksiyonu öğelerinin seri hale getirilmesi hakkında bilgi için bkz . Nasıl yapılır: Tür Açısından Güvenli Koleksiyon Yapma.

Eşlemedeki tek tek öğelerin (anahtarlar ve değerler) tanılama dökümü gerekiyorsa, döküm bağlamının derinliğini 1 veya daha büyük olarak ayarlamanız gerekir.

Bir CMap nesne silindiğinde veya öğeleri kaldırıldığında, anahtarlar ve değerler kaldırılır.

Eşleme sınıfı türetmesi, liste türetmeye benzer. Özel amaçlı liste sınıfının türetilmesine ilişkin bir çizim için Koleksiyonlar makalesine bakın.

Devralma Hiyerarşisi

CObject

CMap

Gereksinimler

Üstbilgi: afxtempl.h

CMap::CMap

Boş bir harita oluşturur.

CMap(INT_PTR nBlockSize = 10);

Parametreler

nBlockSize
Eşlemeyi genişletmek için bellek ayırma ayrıntı düzeyini belirtir.

Açıklamalar

Harita büyüdükçe bellek girdi birimlerinde nBlockSize ayrılır.

Örnek

// declares a map of ints to points
CMap<int, int, CPoint, CPoint> myMap(16);

CMap::CPair

Bir anahtar değeri ve ilişkili nesnenin değerini içerir.

Açıklamalar

Bu, sınıfı CMapiçinde iç içe geçmiş bir yapıdır.

Yapı iki alandan oluşur:

  • key Anahtar türünün gerçek değeri.

  • value İlişkili nesnenin değeri.

, CMap::PGetFirstAssocve CMap::PGetNextAssoc'den CMap::PLookupdönüş değerlerini depolamak için kullanılır.

Örnek

Kullanım örneği için, örneğine CMap::PLookupbakın.

CMap::GetCount

Haritadaki öğe sayısını alır.

INT_PTR GetCount() const;

Dönüş Değeri

Öğe sayısı.

Örnek

örneğine CMap::Lookupbakın.

CMap::GetHashTableSize

Haritanın karma tablosundaki öğe sayısını belirler.

UINT GetHashTableSize() const;

Dönüş Değeri

Karma tablodaki öğelerin sayısı.

Örnek

CMap<int, int, CPoint, CPoint> myMap;

UINT uTableSize = myMap.GetHashTableSize();

CMap::GetNextAssoc

konumundaki eşleme öğesini rNextPositionalır, ardından eşlemedeki bir sonraki öğeye başvurmak için güncelleştirilir rNextPosition .

void GetNextAssoc(
    POSITION& rNextPosition,
    KEY& rKey,
    VALUE& rValue) const;

Parametreler

rNextPosition
Önceki GetNextAssoc veya GetStartPosition çağrı tarafından döndürülen bir POSITION değere başvuru belirtir.

KEY
Harita anahtarının türünü belirten şablon parametresi.

rKey
Alınan öğenin döndürülen anahtarını belirtir.

VALUE
Harita değerinin türünü belirten şablon parametresi.

rValue
Alınan öğenin döndürülen değerini belirtir.

Açıklamalar

Bu işlev en çok haritadaki tüm öğeler arasında yineleme yapmak için kullanışlıdır. Konum sırasının anahtar değer dizisiyle aynı olması gerekmediğini unutmayın.

Alınan öğe eşlemenin son öğesiyse, yeni değeri rNextPosition olarak NULLayarlanır.

Örnek

örneğine CMap::SetAtbakın.

CMap::GetSize

Eşleme öğelerinin sayısını döndürür.

INT_PTR GetSize() const;

Dönüş Değeri

Haritadaki öğelerin sayısı.

Açıklamalar

Eşlemedeki öğe sayısını almak için bu yöntemi çağırın.

Örnek

CMap<int, int, CPoint, CPoint> myMap;

myMap.InitHashTable(257);

// Add 200 elements to the map.
for (int i = 0; i < 200; i++)
{
   myMap[i] = CPoint(i, i);
}

// Remove the elements with even key values.
CPoint pt;
for (int i = 0; myMap.Lookup(i, pt); i += 2)
{
   myMap.RemoveKey(i);
}

ASSERT(myMap.GetSize() == 100);
TRACE(_T("myMap with %d elements:\n"), myMap.GetCount());
POSITION pos = myMap.GetStartPosition();
int iKey;
CPoint ptVal;
while (pos != NULL)
{
   myMap.GetNextAssoc(pos, iKey, ptVal);
   TRACE(_T("\t[%d] = (%d,%d)\n"), iKey, ptVal.x, ptVal.y);
}

CMap::GetStartPosition

Bir çağrıya geçirilebilen bir POSITION değer döndürerek bir GetNextAssoc eşleme yinelemesi başlatır.

POSITION GetStartPosition() const;

Dönüş Değeri

POSITION Eşlemeyi yinelemek için başlangıç konumunu veya NULL haritanın boş olup olmadığını gösteren değer.

Açıklamalar

Yineleme sırası tahmin edilebilir değildir; bu nedenle, "haritadaki ilk öğe" özel bir öneme sahip değildir.

Örnek

örneğine CMap::SetAtbakın.

CMap::InitHashTable

Karma tabloyu başlatır.

void InitHashTable(UINT hashSize, BOOL  bAllocNow = TRUE);

Parametreler

hashSize
Karma tablodaki girdilerin sayısı.

bAllocNow
ise TRUE, başlatma sırasında karma tabloyu ayırır; aksi takdirde tablo gerektiğinde ayrılır.

Açıklamalar

En iyi performans için karma tablo boyutu bir asal sayı olmalıdır. Çakışmaları en aza indirmek için boyut, beklenen en büyük veri kümesinden yaklaşık yüzde 20 daha büyük olmalıdır.

Örnek

örneğine CMap::Lookupbakın.

CMap::IsEmpty

Haritanın boş olup olmadığını belirler.

BOOL IsEmpty() const;

Dönüş Değeri

Bu harita öğe içermiyorsa sıfır olmayan; aksi takdirde 0.

Örnek

örneğine CMap::RemoveAllbakın.

CMap::Lookup

Belirli bir anahtara eşlenen değeri arar.

BOOL Lookup(ARG_KEY key, VALUE& rValue) const;

Parametreler

ARG_KEY
Değerin türünü key belirten şablon parametresi.

key
Aranacak öğeyi tanımlayan anahtarı belirtir.

VALUE
Aranacak değerin türünü belirtir.

rValue
Arama değerini alır.

Dönüş Değeri

Öğe bulunduysa sıfır olmayan; aksi takdirde 0.

Açıklamalar

Lookup verilen anahtarla tam olarak eşleşen bir anahtara sahip harita öğesini hızla bulmak için bir karma algoritması kullanır.

Örnek

CMap<int, int, CPoint, CPoint> myMap;

myMap.InitHashTable(257);

// Add 200 elements to the map.
for (int i = 0; i < 200; i++)
{
   myMap[i] = CPoint(i, i);
}

// Remove the elements with even key values.
CPoint pt;
for (int i = 0; myMap.Lookup(i, pt); i += 2)
{
   myMap.RemoveKey(i);
}

ASSERT(myMap.GetSize() == 100);
TRACE(_T("myMap with %d elements:\n"), myMap.GetCount());
POSITION pos = myMap.GetStartPosition();
int iKey;
CPoint ptVal;
while (pos != NULL)
{
   myMap.GetNextAssoc(pos, iKey, ptVal);
   TRACE(_T("\t[%d] = (%d,%d)\n"), iKey, ptVal.x, ptVal.y);
}

CMap::operator [ ]

Üye işlevi için uygun bir SetAt alternatif.

VALUE& operator[](arg_key key);

Parametreler

VALUE
Eşleme değerinin türünü belirten şablon parametresi.

ARG_KEY
Anahtar değerinin türünü belirten şablon parametresi.

key
Değeri eşlemeden almak için kullanılan anahtar.

Açıklamalar

Bu nedenle, yalnızca atama deyiminin sol tarafında (l değeri) kullanılabilir. Belirtilen anahtara sahip bir eşleme öğesi yoksa yeni bir öğe oluşturulur.

Bu işleçle eşdeğer bir "sağ taraf" (r-değeri) yoktur çünkü haritada bir anahtar bulunmama olasılığı vardır. Lookup Öğe alma için üye işlevini kullanın.

Örnek

örneğine CMap::Lookupbakın.

CMap::PGetFirstAssoc

Eşleme nesnesinin ilk girişini döndürür.

const CPair* PGetFirstAssoc() const;
CPair* PGetFirstAssoc();

Dönüş Değeri

Haritadaki ilk girişin işaretçisi; bkz CMap::CPair. . Eşlemede girdi yoksa değeri olur NULL.

Açıklamalar

Eşleme nesnesindeki ilk öğeyi bir işaretçi döndürmek için bu işlevi çağırın.

Örnek

typedef CMap<int, int, CPoint, CPoint> CMyMap;
CMyMap myMap;

myMap.InitHashTable(257);

// Add 10 elements to the map.
for (int i = 0; i <= 10; i++)
   myMap.SetAt(i, CPoint(i, i));

// Print the element value with even key values.
int nKey = 0;
CPoint pt;
CMyMap::CPair *pCurVal;

pCurVal = myMap.PGetFirstAssoc();
while (pCurVal != NULL)
{
   if ((nKey % 2) == 0)
   {
      _tprintf_s(_T("Current key value at %d: %d,%d\n"),
                 pCurVal->key, pCurVal->value.x, pCurVal->value.y);
   }
   pCurVal = myMap.PGetNextAssoc(pCurVal);
   nKey++;
}

CMap::PGetNextAssoc

tarafından pAssocRecişaret edilen eşleme öğesini alır.

const CPair *PGetNextAssoc(const CPair* pAssocRet) const;

CPair *PGetNextAssoc(const CPair* pAssocRet);

Parametreler

pAssocRet
Önceki PGetNextAssoc veya CMap::PGetFirstAssoc çağrı tarafından döndürülen bir harita girdisini gösterir.

Dönüş Değeri

Haritadaki bir sonraki girdinin işaretçisi; bkz CMap::CPair. . öğesi eşlemenin son öğesiyse, değeri olur NULL.

Açıklamalar

Eşlemedeki tüm öğeleri yinelemek için bu yöntemi çağırın. çağrısı PGetFirstAssoc olan ilk öğeyi alın ve ardından öğesine yapılan ardışık çağrılarla PGetNextAssoceşlemede yineleyin.

Örnek

örneğine CMap::PGetFirstAssocbakın.

CMap::PLookup

Belirli bir anahtara eşlenen değeri bulur.

const CPair* PLookup(ARG_KEY key) const;
CPair* PLookup(ARG_KEY key);

Parametreler

key
Aranacak öğenin anahtarı.

Dönüş Değeri

Anahtar yapısının işaretçisi; bkz CMap::CPair. . Eşleşme bulunmazsa döndürür CMap::PLookup NULL.

Açıklamalar

Verilen anahtarla tam olarak eşleşen bir anahtara sahip bir eşleme öğesi aramak için bu yöntemi çağırın.

Örnek

typedef CMap<int, int, CPoint, CPoint> CMyMap;
CMyMap myMap;

myMap.InitHashTable(257);

// Add 10 elements to the map.
for (int i = 0; i <= 10; i++)
   myMap[i] = CPoint(i, i);

// Print the element values with even key values.
CMyMap::CPair *pCurVal;

for (int i = 0; i <= myMap.GetCount(); i += 2)
{
   pCurVal = myMap.PLookup(i);
   _tprintf_s(_T("Current key value at %d: %d,%d\n"),
              pCurVal->key, pCurVal->value.x, pCurVal->value.y);
}

CMap::RemoveAll

Genel yardımcı işlevini DestructElementsçağırarak bu eşlemedeki tüm değerleri kaldırır.

void RemoveAll();

Açıklamalar

Eşleme zaten boşsa işlev düzgün çalışır.

Örnek

CMap<int, int, CPoint, CPoint> myMap;

// Add 10 elements to the map.
for (int i = 0; i < 10; i++)
   myMap.SetAt(i, CPoint(i, i));

myMap.RemoveAll();

ASSERT(myMap.IsEmpty());

CMap::RemoveKey

Sağlanan anahtara karşılık gelen eşleme girişini arar; daha sonra anahtar bulunursa girişi kaldırır.

BOOL RemoveKey(ARG_KEY key);

Parametreler

ARG_KEY
Anahtarın türünü belirten şablon parametresi.

key
Kaldırılacak öğenin anahtarı.

Dönüş Değeri

Girdi bulunduysa ve başarıyla kaldırıldıysa sıfır olmayan; aksi takdirde 0.

Açıklamalar

Yardımcı DestructElements işlevi girişi kaldırmak için kullanılır.

Örnek

örneğine CMap::SetAtbakın.

CMap::SetAt

Birincil, bir öğeyi eşlem içine eklemek anlamına gelir.

void SetAt(ARG_KEY key, ARG_VALUE newValue);

Parametreler

ARG_KEY
Parametrenin key türünü belirten şablon parametresi.

key
Yeni öğenin anahtarını belirtir.

ARG_VALUE
Parametrenin newValue türünü belirten şablon parametresi.

newValue
Yeni öğenin değerini belirtir.

Açıklamalar

İlk olarak, anahtar aranmış. Anahtar bulunursa ilgili değer değiştirilir; aksi takdirde yeni bir anahtar-değer çifti oluşturulur.

Örnek

CMap<int, int, CPoint, CPoint> myMap;

// Add 10 elements to the map.
for (int i = 0; i < 10; i++)
   myMap.SetAt(i, CPoint(i, i));

// Remove the elements with even key values.
POSITION pos = myMap.GetStartPosition();
int nKey;
CPoint pt;
while (pos != NULL)
{
   myMap.GetNextAssoc(pos, nKey, pt);

   if ((nKey % 2) == 0)
      myMap.RemoveKey(nKey);
}

// Print the element values.
pos = myMap.GetStartPosition();
while (pos != NULL)
{
   myMap.GetNextAssoc(pos, nKey, pt);
   _tprintf_s(_T("Current key value at %d: %d,%d\n"),
              nKey, pt.x, pt.y);
}

Ayrıca bkz.

MFC Örneği COLLECT
CObject Sınıf
Hiyerarşi Grafiği