Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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
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:
keyAnahtar 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);
}