Bagikan melalui


CMap Kelas

Kelas koleksi kamus yang memetakan kunci unik ke nilai.

Sintaks

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

Parameter

KEY
Kelas objek yang digunakan sebagai kunci ke peta.

ARG_KEY
Jenis data yang digunakan untuk KEY argumen; biasanya referensi ke KEY.

VALUE
Kelas objek yang disimpan di peta.

ARG_VALUE
Jenis data yang digunakan untuk VALUE argumen; biasanya referensi ke VALUE.

Anggota

Struktur Publik

Nama Deskripsi
CMap::CPair Struktur berlapis yang berisi nilai kunci dan nilai objek terkait.

Konstruktor Publik

Nama Deskripsi
CMap::CMap Membuat koleksi yang memetakan kunci ke nilai.

Metode Publik

Nama Deskripsi
CMap::GetCount Mengembalikan jumlah elemen dalam peta ini.
CMap::GetHashTableSize Mengembalikan jumlah elemen dalam tabel hash.
CMap::GetNextAssoc Mendapatkan elemen berikutnya untuk iterasi.
CMap::GetSize Mengembalikan jumlah elemen dalam peta ini.
CMap::GetStartPosition Mengembalikan posisi elemen pertama.
CMap::InitHashTable Menginisialisasi tabel hash dan menentukan ukurannya.
CMap::IsEmpty Pengujian untuk kondisi peta kosong (tidak ada elemen).
CMap::Lookup Mencari nilai yang dipetakan ke kunci tertentu.
CMap::PGetFirstAssoc Mengembalikan penunjuk ke elemen pertama.
CMap::PGetNextAssoc Mendapatkan penunjuk ke elemen berikutnya untuk iterasi.
CMap::PLookup Mengembalikan penunjuk ke kunci yang nilainya cocok dengan nilai yang ditentukan.
CMap::RemoveAll Menghapus semua elemen dari peta ini.
CMap::RemoveKey Menghapus elemen yang ditentukan oleh kunci.
CMap::SetAt Menyisipkan elemen ke dalam peta; menggantikan elemen yang ada jika kunci yang cocok ditemukan.

Operator Publik

Nama Deskripsi
CMap::operator [ ] Menyisipkan elemen ke dalam peta — penggantian operator untuk SetAt.

Keterangan

Setelah Anda menyisipkan pasangan kunci-nilai (elemen) ke dalam peta, Anda dapat mengambil atau menghapus pasangan secara efisien menggunakan kunci untuk mengaksesnya. Anda juga dapat melakukan iterasi di semua elemen di peta.

Variabel jenis POSITION digunakan untuk akses alternatif ke entri. Anda dapat menggunakan POSITION untuk "mengingat" entri dan untuk melakukan iterasi melalui peta. Anda mungkin berpikir bahwa iterasi ini berurutan oleh nilai kunci; itu tidak. Urutan elemen yang diambil tidak ditentukan.

Fungsi anggota tertentu dari kelas ini memanggil fungsi pembantu global yang harus disesuaikan untuk sebagian besar penggunaan CMap kelas. Lihat Pembantu Kelas Koleksi di bagian Makro dan Global dari Referensi MFC.

CMap mengambil alih CObject::Serialize untuk mendukung serialisasi dan pembuangan elemennya. Jika peta disimpan ke arsip menggunakan Serialize, setiap elemen peta diserialisasikan secara bergiliran. Implementasi default fungsi pembantu SerializeElements melakukan penulisan bitwise. Untuk informasi tentang serialisasi item koleksi pointer yang berasal dari CObject atau jenis yang ditentukan pengguna lainnya, lihat Cara: Membuat Koleksi Type-Safe.

Jika Anda memerlukan cadangan diagnostik elemen individual di peta (kunci dan nilai), Anda harus mengatur kedalaman konteks cadangan ke 1 atau lebih besar.

CMap Saat objek dihapus, atau ketika elemennya dihapus, kunci dan nilai keduanya akan dihapus.

Derivasi kelas peta mirip dengan derivasi daftar. Lihat artikel Koleksi untuk ilustrasi turunan kelas daftar tujuan khusus.

Hierarki Warisan

CObject

CMap

Persyaratan

Header: afxtempl.h

CMap::CMap

Membuat peta kosong.

CMap(INT_PTR nBlockSize = 10);

Parameter

nBlockSize
Menentukan granularitas alokasi memori untuk memperluas peta.

Keterangan

Seiring bertambahnya peta, memori dialokasikan dalam satuan nBlockSize entri.

Contoh

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

CMap::CPair

Berisi nilai kunci dan nilai objek terkait.

Keterangan

Ini adalah struktur berlapis dalam kelas CMap.

Struktur terdiri dari dua bidang:

  • key Nilai aktual dari jenis kunci.

  • value Nilai objek terkait.

Ini digunakan untuk menyimpan nilai pengembalian dari CMap::PLookup, , CMap::PGetFirstAssocdan CMap::PGetNextAssoc.

Contoh

Untuk contoh penggunaan, lihat contoh untuk CMap::PLookup.

CMap::GetCount

Mengambil jumlah elemen dalam peta.

INT_PTR GetCount() const;

Tampilkan Nilai

Jumlah elemen.

Contoh

Lihat contoh untuk CMap::Lookup.

CMap::GetHashTableSize

Menentukan jumlah elemen dalam tabel hash untuk peta.

UINT GetHashTableSize() const;

Tampilkan Nilai

Jumlah elemen dalam tabel hash.

Contoh

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

UINT uTableSize = myMap.GetHashTableSize();

CMap::GetNextAssoc

Mengambil elemen peta di rNextPosition, lalu memperbarui rNextPosition untuk merujuk ke elemen berikutnya di peta.

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

Parameter

rNextPosition
Menentukan referensi ke nilai yang POSITION dikembalikan oleh panggilan atau GetStartPosition sebelumnyaGetNextAssoc.

KEY
Parameter templat yang menentukan jenis kunci peta.

rKey
Menentukan kunci yang dikembalikan dari elemen yang diambil.

VALUE
Parameter templat yang menentukan jenis nilai peta.

rValue
Menentukan nilai yang dikembalikan dari elemen yang diambil.

Keterangan

Fungsi ini paling berguna untuk iterasi melalui semua elemen di peta. Perhatikan bahwa urutan posisi belum tentu sama dengan urutan nilai kunci.

Jika elemen yang diambil adalah yang terakhir dalam peta, maka nilai rNextPosition baru diatur ke NULL.

Contoh

Lihat contoh untuk CMap::SetAt.

CMap::GetSize

Mengembalikan jumlah elemen peta.

INT_PTR GetSize() const;

Tampilkan Nilai

Jumlah item dalam peta.

Keterangan

Panggil metode ini untuk mengambil jumlah elemen dalam peta.

Contoh

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

Memulai iterasi peta dengan mengembalikan POSITION nilai yang dapat diteruskan ke GetNextAssoc panggilan.

POSITION GetStartPosition() const;

Tampilkan Nilai

Nilai POSITION yang menunjukkan posisi awal untuk melakukan iterasi peta; atau NULL jika peta kosong.

Keterangan

Urutan iterasi tidak dapat diprediksi; oleh karena itu, "elemen pertama dalam peta" tidak memiliki signifikansi khusus.

Contoh

Lihat contoh untuk CMap::SetAt.

CMap::InitHashTable

Menginisialisasi tabel hash.

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

Parameter

hashSize
Jumlah entri dalam tabel hash.

bAllocNow
Jika TRUE, mengalokasikan tabel hash setelah inisialisasi; jika tidak, tabel dialokasikan saat diperlukan.

Keterangan

Untuk performa terbaik, ukuran tabel hash harus berupa angka utama. Untuk meminimalkan tabrakan, ukurannya harus kira-kira 20 persen lebih besar dari himpunan data terbesar yang diantisipasi.

Contoh

Lihat contoh untuk CMap::Lookup.

CMap::IsEmpty

Menentukan apakah peta kosong.

BOOL IsEmpty() const;

Tampilkan Nilai

Bukan nol jika peta ini tidak berisi elemen; jika tidak, 0.

Contoh

Lihat contoh untuk CMap::RemoveAll.

CMap::Lookup

Mencari nilai yang dipetakan ke kunci tertentu.

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

Parameter

ARG_KEY
Parameter templat yang menentukan jenis key nilai.

key
Menentukan kunci yang mengidentifikasi elemen yang akan dicari.

VALUE
Menentukan jenis nilai yang akan dicari.

rValue
Menerima nilai yang dicari.

Tampilkan Nilai

Bukan nol jika elemen ditemukan; jika tidak, 0.

Keterangan

Lookup menggunakan algoritma hashing untuk menemukan elemen peta dengan cepat dengan kunci yang sama persis dengan kunci yang diberikan.

Contoh

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 [ ]

Pengganti yang nyaman untuk SetAt fungsi anggota.

VALUE& operator[](arg_key key);

Parameter

VALUE
Parameter templat yang menentukan jenis nilai peta.

ARG_KEY
Parameter templat yang menentukan jenis nilai kunci.

key
Kunci yang digunakan untuk mengambil nilai dari peta.

Keterangan

Dengan demikian hanya dapat digunakan di sisi kiri pernyataan penugasan (nilai l). Jika tidak ada elemen peta dengan kunci yang ditentukan, maka elemen baru dibuat.

Tidak ada "sisi kanan" (r-value) yang setara dengan operator ini karena ada kemungkinan bahwa kunci mungkin tidak ditemukan di peta. Lookup Gunakan fungsi anggota untuk pengambilan elemen.

Contoh

Lihat contoh untuk CMap::Lookup.

CMap::PGetFirstAssoc

Mengembalikan entri pertama objek peta.

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

Tampilkan Nilai

Penunjuk ke entri pertama di peta; lihat CMap::CPair. Jika peta tidak berisi entri, nilainya adalah NULL.

Keterangan

Panggil fungsi ini untuk mengembalikan penunjuk elemen pertama dalam objek peta.

Contoh

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

Mengambil elemen peta yang ditujukkan oleh pAssocRec.

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

CPair *PGetNextAssoc(const CPair* pAssocRet);

Parameter

pAssocRet
Menunjuk ke entri peta yang dikembalikan oleh sebelumnya PGetNextAssoc atau CMap::PGetFirstAssoc panggilan.

Tampilkan Nilai

Penunjuk ke entri berikutnya di peta; lihat CMap::CPair. Jika elemen adalah yang terakhir dalam peta, nilainya adalah NULL.

Keterangan

Panggil metode ini untuk melakukan iterasi melalui semua elemen di peta. Ambil elemen pertama dengan panggilan ke PGetFirstAssoc lalu iterasi melalui peta dengan panggilan berturut-turut ke PGetNextAssoc.

Contoh

Lihat contoh untuk CMap::PGetFirstAssoc.

CMap::PLookup

Menemukan nilai yang dipetakan ke kunci tertentu.

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

Parameter

key
Kunci untuk elemen yang akan dicari.

Tampilkan Nilai

Penunjuk ke struktur kunci; lihat CMap::CPair. Jika tidak ada kecocokan yang ditemukan, CMap::PLookup mengembalikan NULL.

Keterangan

Panggil metode ini untuk mencari elemen peta dengan kunci yang sama persis dengan kunci yang diberikan.

Contoh

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

Menghapus semua nilai dari peta ini dengan memanggil fungsi DestructElementspembantu global .

void RemoveAll();

Keterangan

Fungsi berfungsi dengan benar jika peta sudah kosong.

Contoh

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

Mencari entri peta yang sesuai dengan kunci yang disediakan; kemudian, jika kunci ditemukan, akan menghapus entri.

BOOL RemoveKey(ARG_KEY key);

Parameter

ARG_KEY
Parameter templat yang menentukan jenis kunci.

key
Kunci untuk elemen yang akan dihapus.

Tampilkan Nilai

Bukan nol jika entri ditemukan dan berhasil dihapus; jika tidak, 0.

Keterangan

Fungsi DestructElements pembantu digunakan untuk menghapus entri.

Contoh

Lihat contoh untuk CMap::SetAt.

CMap::SetAt

Primer berarti menyisipkan elemen dalam peta.

void SetAt(ARG_KEY key, ARG_VALUE newValue);

Parameter

ARG_KEY
Parameter templat yang menentukan jenis key parameter.

key
Menentukan kunci elemen baru.

ARG_VALUE
Parameter templat yang menentukan jenis newValue parameter.

newValue
Menentukan nilai elemen baru.

Keterangan

Pertama, kuncinya dicari. Jika kunci ditemukan, maka nilai yang sesuai diubah; jika tidak, pasangan kunci-nilai baru dibuat.

Contoh

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);
}

Lihat juga

Sampel MFC COLLECT
CObject Kelas
Bagan Hierarki