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
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::PGetFirstAssoc
dan 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 DestructElements
pembantu 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);
}