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 SetAt iş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.
CMap
CObject::Serialize
öğelerinin seri hale getirilmesini ve dökümünü desteklemek için geçersiz kılar. Bir eşleme kullanılarak Serialize
bir 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
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ı CMap
iç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::PGetFirstAssoc
ve CMap::PGetNextAssoc
'den CMap::PLookup
dönüş değerlerini depolamak için kullanılır.
Örnek
Kullanım örneği için, örneğine CMap::PLookup
bakı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::Lookup
bakı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 rNextPosition
alı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 NULL
ayarlanır.
Örnek
örneğine CMap::SetAt
bakı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::SetAt
bakı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::Lookup
bakı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::RemoveAll
bakı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::Lookup
bakı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 pAssocRec
iş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 PGetNextAssoc
eşlemede yineleyin.
Örnek
örneğine CMap::PGetFirstAssoc
bakı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::SetAt
bakı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);
}