C++

C++'da Benzersiz ve Sıralı Konteynerler

C++'da Benzersiz ve Sıralı Konteynerler
6, 10, 2, 8, 4 bir kümedir; 2, 4, 6, 8, 10 artan düzende düzenlenmiş aynı tamsayıların bir kümesidir. Matematikte, bir kümenin benzersiz öğeleri (farklı öğeler) vardır ve yani hiçbir öğe birden fazla kez oluşmaz. Ayrıca, çoklu küme, herhangi bir öğenin birden fazla kez meydana gelebileceği bir kümedir. 6, 6, 10, 2, 2, 8, 4, 4, 4 bir çoklu kümedir. 2, 2, 4, 4, 4, 6, 6, 8, 10 aynı çoklu kümedir, ancak öğeler artan sırada düzenlenir. Bu makale çoklu küme ile ilgilenmiyor. Set olarak adlandırılan C++ veri yapısıyla ilgilenir.

Yazılımdaki bir harita bir dizi gibidir, ancak bir yerine iki sütunlu bir dizidir. İlk sütunda anahtarlar ve ikinci sütunda değerler bulunur. Her satır bir çifttir ve bir anahtar/değer çifti oluşturur. Bir anahtar, değeriyle doğrudan ilişkilidir.

Harita örneği 'c',30, 'b',20, 'd',30, 'e',40, 'a',10. Buraya eklenen ilk anahtar/değer çifti 'c',3'dir, burada 'c' anahtar ve 30 değerdir. Bu harita anahtarlara göre sıralanmamıştır. Bu haritayı anahtarlara göre sıralamak 'a',10, 'b',20, 'c',30, 'd',30, 'e',40 üretir. Yinelenen değerler olabileceğine, ancak yinelenen anahtarların bulunmadığına dikkat edin. Sıralı bir harita, tuşlara göre sıralanmış bir haritadır.

Çoklu harita bir harita için olduğu gibi, çoklu küme bir küme içindir. Bu, yinelenen anahtarlara sahip haritalar olduğu anlamına gelir. Çoklu harita örneği 'a',10, 'b',20, 'b',20, 'c',30, 'c',30, 'd ',30, 'e',40. Ve yukarıda belirtildiği gibi, bu makale multimap ile ilgilenmez, bunun yerine map denilen C++ veri yapısı ile ilgilenir.

C++'da veri yapısı, özellikleri (veri üyeleri) ve yöntemleri (üye işlevleri) olan bir yapıdır. Yapının verileri bir listedir; küme bir listedir; harita, anahtar/değer çiftlerinin bir listesidir.

Bu makale, C++'daki kümelerin ve haritaların temellerini tartışır ve bu makaleyi daha iyi anlamak için okuyucunun temel C bilgisine sahip olması gerekir++.

Makale İçeriği:

Sınıf ve Nesneleri:

C++'da küme, harita ve diğer benzer yapılar kapsayıcılar olarak adlandırılır. Sınıf, değişkenler olan veri üyeleri ve ilişkili üye işlevleri olan genelleştirilmiş bir birimdir. Veri üyelerine değerler verildiğinde, bir nesne oluşturulur. Ancak, örnekleme adı verilen bir süreçte bir nesne oluşturulur. Bir sınıf, aynı veri üyesi değişkenleri için farklı değerlere yol açabileceğinden, aynı sınıftan farklı nesneler başlatılabilir.

C++'da, kullanılamaz bir küme, bir sınıf ve aynı zamanda kullanılamaz bir haritadır. Kullanılamaz kümeden veya kullanılamaz haritadan bir nesne başlatıldığında, nesne gerçek veri yapısı olur. Küme ve harita veri yapıları ile asıl veri üyesi bir listedir. Eh, küme ve harita, sıralı ilişkisel kapsayıcılar olarak adlandırılan bir grup kap oluşturur. Sırasız küme ve sırasız harita da var, ancak bunlar ne yazık ki bu makalede ele alınmıyor.

Bir set veya harita oluşturma:

Küme sınıfından bir küme örneği oluşturmak, bir küme oluşturmaktır; harita sınıfından bir haritayı başlatmak, bir harita oluşturmaktır. Bu şekilde oluşturulan nesneye programcının tercih ettiği bir isim verilir.

Bir set oluşturmak için program şöyle başlamalıdır:

#Dahil etmek
#Dahil etmek
ad alanı std kullanarak;

“#include” yönergesine dikkat edin ”, küme veri yapılarının somutlaştırılacağı küme sınıfına sahip küme kitaplığını içerir.

Bir harita oluşturmak için program şöyle başlamalıdır:

#Dahil etmek
#Dahil etmek
ad alanı std kullanarak;

“#include” yönergesine dikkat edin ”, harita veri yapılarının somutlaştırılacağı harita sınıfına sahip harita kitaplığını içerir.

Boş bir küme oluşturmak için sözdizimi şöyledir:

Ayarlamak Nesne adı

Misal:

Ayarlamak setObj;

İçeriğe sahip bir set oluşturmaya bir örnek:

Ayarlamak setObj(6, 10, 2, 8, 4);

Boş bir harita oluşturmak için sözdizimi şöyledir:

harita Nesne adı

Misal:

harita mapObj;

İçeriği olan bir harita oluşturmaya bir örnek:

harita mapObj('c',30,'b',20,'d',30,'e',40,'a',10);

Yineleyici Temelleri:

Yineleyici, veri yapısının listesini baştan sona geçmek için kullanılabilen ayrıntılı bir işaretçidir.

start() üye İşlevi

start() üye işlevi, listenin ilk öğesine işaret eden bir yineleyici döndürür. Aşağıdaki örnek bunu küme için göstermektedir:

Ayarlamak setObj(6, 10, 2, 8, 4);
Ayarlamak::yineleyici yineleyici = setObj.başla();
cout << *iter << '\n';

start()'ın setObj ve nokta operatörü ile nasıl kullanıldığına dikkat edin. iter, döndürülen yineleyici nesnesidir. Ayrıca, nasıl ilan edildiğine dikkat edin. * dolaylı operatördür. iter ile kullanıldığında kümenin ilk öğesini döndürür; ilk eleman 6 yerine 2'dir - aşağıdaki açıklamaya bakın.

Aşağıdaki örnek, harita için start() işlevinin kullanımını gösterir:

harita mapObj('c',30,'b',20,'d',30,'e',40,'a',10);
harita::yineleyici yineleyici = mapObj.başla();
cout << "" << (*iter).first <<',' << (*iter).second << "\n";

start() yönteminin mapObj ve nokta operatörüyle birlikte kullanıldığına dikkat edin. iter, döndürülen yineleyici nesnesidir. Ayrıca, nasıl ilan edildiğine dikkat edin. Burada kullanıldığı şekliyle "ilk", anahtarı ifade eder. "saniye", anahtara karşılık gelen değeri ifade eder. Listenin başlangıç ​​öğesi bileşenlerini elde etmek için iter ile nasıl kullanıldıklarını gözlemleyin. İlk öğe c,30 yerine a,10'dur - aşağıdaki açıklamaya bakın.

"begin() const" üye İşlevi

"begin() const" üye işlevi, kümenin bildirimi const (sabit için) ile başladığında listenin ilk öğesini işaret eden bir yineleyici döndürür. Bu koşul altında, döndürülen yineleyicinin başvurduğu listedeki değer yineleyici tarafından değiştirilemez. Aşağıdaki örnek, set için kullanımını göstermektedir:

sabit küme setObj(6, 10, 2, 8, 4);
Ayarlamak::const_iterator iter = setObj.başla();
cout << *iter << '\n';

start()'ın setObj ve nokta operatörü ile nasıl kullanıldığına dikkat edin. start() 'dan hemen sonra "const" yazılmadı. Ancak, “const” bildirimden önce geldi. burada yineleyici, normal yineleyiciden farklı olan döndürülen sabit yineleyici nesnesidir. Ayrıca, nasıl ilan edildiğine dikkat edin. * dolaylı operatördür; iter ile kullanıldığı gibi, kümenin ilk öğesini döndürür. İlk eleman 6 yerine 2'dir - aşağıdaki açıklamaya bakın.

Aşağıdaki örnek, harita için "begin() const" işlevinin kullanımını gösterir:

sabit harita mapObj('c',30,'b',20,'d',30,'e',40,'a',10);
harita::const_iterator iter = mapObj.başla();
cout << "" << (*iter).first <<',' << (*iter).second << "\n";

start() yönteminin mapObj ve nokta operatörüyle birlikte kullanıldığına dikkat edin. start() 'dan hemen sonra "const" yazılmadı. Ancak, “const” bildirimden önce geldi. burada yineleyici, normal yineleyiciden farklı olan döndürülen sabit yineleyici nesnesidir. Ayrıca, nasıl ilan edildiğine dikkat edin. Burada kullanıldığı şekliyle “first”, anahtarı ifade eder; Burada kullanıldığı şekliyle "saniye", anahtara karşılık gelen değeri ifade eder. Listenin başlangıç ​​öğesi bileşenlerini elde etmek için iter ile nasıl kullanıldıklarını gözlemleyin. İlk öğe c,30 yerine a,10'dur - aşağıdaki açıklamaya bakın.

end() üye İşlevi

end() üye işlevi, listenin sonundan hemen sonrasını gösteren bir yineleyici döndürür. Aşağıdaki örnek bunu küme için göstermektedir:

Ayarlamak setObj(6, 10, 2, 8, 4);
Ayarlamak::yineleyici yineleyici = setObj.son();
cout << *iter << '\n';

end()'in setObj ve nokta operatörü ile nasıl kullanıldığına dikkat edin. iter, döndürülen yineleyici nesnesidir. Ayrıca, nasıl ilan edildiğine dikkat edin. * dolaylı operatördür; iter ile kullanıldığı gibi, kümenin son + 1 öğesini döndürür. Yazarın bilgisayarında bu son+1 elemanı listede olmayan 5'tir. Bu nedenle, bu öğeyi kullanmamaya dikkat edin.

Aşağıdaki örnek, harita için end() işlevinin kullanımını gösterir:

harita mapObj('c',30,'b',20,'d',30,'e',40,'a',10);
harita::yineleyici yineleyici = mapObj.son();
cout << "" << (*iter).first <<',' << (*iter).second << "\n";

mapObj ve nokta operatörü ile end() yönteminin kullanıldığına dikkat edin. iter, döndürülen yineleyici nesnesidir. Ayrıca, nasıl ilan edildiğine dikkat edin. * dolaylı operatördür; iter ile kullanıldığı gibi, haritanın son + 1 öğesini döndürür. Yazarın bilgisayarında, bu son+1 elemanı, listede olmayan ,0'dir. Bu nedenle, bu öğeyi kullanmamaya dikkat edin.

“end() const” üye İşlevi

"end() const" üye işlevi, kümenin bildirimi const (sabit için) ile başladığında listenin sonundan hemen sonra işaret eden bir yineleyici döndürür. Bu koşul altında, döndürülen yineleyicinin başvurduğu listedeki değer yineleyici tarafından değiştirilemez. Aşağıdaki örnek, set için kullanımını göstermektedir:

sabit küme setObj(6, 10, 2, 8, 4);
Ayarlamak::const_iterator iter = setObj.son();
cout << *iter << '\n';

end()'in setObj ve nokta operatörü ile nasıl kullanıldığına dikkat edin. Sondan hemen sonra "const" yazılmadı(). Ancak, “const” bildirimden önce geldi. iter, döndürülen yineleyici nesnesidir. Ayrıca, nasıl ilan edildiğine dikkat edin. * dolaylı operatördür; iter ile kullanıldığı gibi, kümenin son + 1 öğesini döndürür.

Aşağıdaki örnek, harita için "end() const" işlevinin kullanımını gösterir:

sabit harita mapObj('c',30,'b',20,'d',30,'e',40,'a',10);
harita::const_iterator iter = mapObj.son();
cout << "" << (*iter).first <<',' << (*iter).second << "\n";

mapObj ve nokta operatörü ile end() yönteminin kullanıldığına dikkat edin. Sondan hemen sonra "const" yazılmadı(). Ancak, “const” bildirimden önce geldi. iter, normal yineleyiciden farklı, döndürülen sabit yineleyici nesnesidir. Ayrıca, ilan edilme şeklini dikkatlice gözlemleyin.

Küme ve harita için Öğe Erişimi:

Ayarlamak

Küme ile öğe, dolaylı operatör kullanılarak okunur. Bir kümenin ilk iki elemanı aşağıdaki örnekte okunur:

Ayarlamak setObj(6, 10, 2, 8, 4);
Ayarlamak::yineleyici yineleyici = setObj.başla();
cout << *iter << '\n';
++yineleme;
cout << *iter << '\n';

Çıktı 2'dir, ardından 4 gelir - aşağıdaki açıklamaya bakın. Listenin bir sonraki öğesini işaret etmek için yineleyici artırılır.

Not: Bir öğe, küme için dolaylı operatör kullanılarak değiştirilemez. Örneğin, “*iter = 9;” imkansız.

harita

Bir harita, anahtar/değer çiftlerinden oluşur. İlgili anahtar kullanılarak bir değer okunabilir ve aynı anahtar kullanılarak değiştirilebilir. Aşağıdaki kod segmenti bunu göstermektedir:

harita mapObj('c',30,'b',20,'d',30,'e',40,'a',10);
cout << mapObj['b'] << '\n';
mapObj['b'] = 55;
cout << mapObj['b'] << '\n';

Çıktı:

20
55

Nokta operatörü burada kullanılmamıştır. Bunun yerine, anahtarı içerik olarak alan köşeli parantez operatörü kullanılmıştır.

Bir küme veya haritadaki Öğelerin Sırası:

Öğeler herhangi bir sırayla bir kümeye eklenebilir. Ancak, eklendikten sonra küme, öğelerini artan sırada yeniden düzenler. Artan düzen varsayılan düzendir. Azalan düzen gerekiyorsa, küme aşağıdaki örnekte olduğu gibi bildirilmelidir:

Ayarlamak > setObj(6, 10, 2, 8, 4);

Yani, türden sonra, e.g., int, şablon için bir virgül ve ardından “daha ​​büyük” köşeli parantez içinde.

Öğeler herhangi bir sırayla bir haritaya eklenebilir. Ancak, bir kez eklendiğinde, harita, her bir anahtar ile değeri arasındaki ilişkiyi korurken öğelerini (yalnızca) anahtara göre artan sırada yeniden düzenler. Artan sıra varsayılan sıradır; azalan düzen gerekiyorsa, harita aşağıdaki örnekte olduğu gibi bildirilmelidir:

harita > mapObj('c',30,'b',20,'d',30,'e',40,'a',10);

Böylece, tür çiftinden sonra, e.g., "char, int", şablon için bir virgül ve ardından "büyük” köşeli parantez içinde.

Bir kümeyi geçmek

Yineleyici ile while döngüsü veya for döngüsü, bir kümeyi geçmek için kullanılabilir. Aşağıdaki örnek, azalan düzende yapılandırılmış bir kümeyi geçmek için bir for döngüsü kullanır:

Ayarlamak > setObj(6, 10, 2, 8, 4);
için (ayar::yineleyici yineleyici = setObj.başla(); yineleme != setObj.son(); ++iter)

cout << *iter << ";

Çıktı:

10 8 6 4 2

Bir yineleyiciyi artırmak, onu bir sonraki öğeye yönlendirir.

Bir haritayı geçmek

Yineleyici ile while döngüsü veya for döngüsü bir haritayı geçmek için kullanılabilir. Aşağıdaki örnek, azalan düzende yapılandırılmış bir haritayı geçmek için bir for döngüsü kullanır:

harita > mapObj('c',30,'b',20,'d',30,'e',40,'a',10);
için (harita::yineleyici yineleyici = mapObj.başla(); yineleme != mapObj.son(); ++iter)

cout << "" << (*iter).first << ", " << (*iter).second << "" << ", ";

Çıktı:

e, 40, d, 30, c, 30, b, 20, a, 10,

Bir yineleyiciyi artırmak, onu bir sonraki öğeye yönlendirir. Koddaki "birinci", anahtarı ifade eder ve "ikinci", karşılık gelen değeri ifade eder. Çıktı için bu değerlerin nasıl elde edildiğine dikkat edin.

Diğer Yaygın Olarak Kullanılan Üye İşlevleri:

size() İşlevi

Bu işlev, listedeki öğelerin sayısı olan bir tamsayı döndürür. Örnek ayarlayın:

Ayarlamak > setObj(6, 10, 2, 8, 4);
cout << setObj.size() << '\n';

çıktı 5.

Harita örneği:

harita > mapObj('c',30,'b',20,'d',30,'e',40,'a',10);
cout << mapObj.size() << '\n';

çıktı 5.

insert() Fonksiyonu

Ayarlamak

set çoğaltmaya izin vermiyor. Bu nedenle, eklenen herhangi bir kopya sessizce reddedilir. set ile, insert() fonksiyonunun argümanı eklenecek değerdir. Değer, setteki sıranın artan veya azalan olarak kaldığı bir konuma yerleştirilir. Misal:

Ayarlamak setObj(6, 10, 2, 8, 4);
setObj.ekleme(6);
setObj.ekleme(9);
setObj.ekleme(12);
için (ayar::yineleyici yineleyici = setObj.başla(); yineleme != setObj.son(); ++iter)

cout << *iter << ";

Çıktı:

2 4 6 8 9 10 12

Not: insert() üye işlevi, boş bir kümeyi doldurmak için kullanılabilir.

harita

harita, anahtarla çoğaltmaya izin vermiyor. Bu nedenle, eklenen herhangi bir kopya sessizce reddedilir. Harita ile, insert() işlevinin argümanı, parantez içindeki anahtar/değer çiftidir. Öğe, haritadaki sıranın artan veya azalan olarak kaldığı anahtarla bir konuma yerleştirilir. Misal:

harita mapObj('c',30,'b',20,'d',30,'e',40,'a',10);
haritaObj.ekle('e',80);
haritaObj.ekle('f',50);
haritaObj.ekle('g',60);
için (harita::yineleyici yineleyici = mapObj.başla(); yineleme != mapObj.son(); ++iter)
cout << "" << (*iter).first << ", " << (*iter).second << "" << ", ";

Çıktı:

a, 10, b, 20, c, 30, d, 30, e, 40, f, 50, g, 60,

Not: insert() üye işlevi, boş bir haritayı doldurmak için kullanılabilir.

boş() İşlevi

Bu işlev, liste boşsa true, değilse false döndürür. Örnek ayarlayın:

Ayarlamak setObj(6, 10, 2, 8, 4);
bool ret = setObj.boş();
cout << ret << '\n';

Çıktı false için 0'dır, yani buradaki küme boş değildir.

Harita örneği:

harita mapObj('c',30,'b',20,'d',30,'e',40,'a',10);
bool ret = mapObj.boş();
cout << ret << '\n';

Çıktı false için 0'dır, yani buradaki harita boş değildir.

sil() işlevi

Ayarlamak

Aşağıdaki kod segmentini göz önünde bulundurun:

Ayarlamak setObj(10, 20, 30, 40, 50);
Ayarlamak::yineleyici yineleyici = setObj.başla();
Ayarlamak::iteratör itr = setObj.sil(iter);
cout << "new size: " << setObj.size() << '\n';
cout << "next value: " << *itr << '\n';
itr = setObj.sil(itr);
cout << "new size: " << setObj.size() << '\n';
cout << "next value: " << *itr << '\n';

Çıktı:

yeni boyut: 4
sonraki değer: 20
yeni boyut: 3
sonraki değer: 30

delete() işlevi, argüman olarak bir öğeye işaret eden bir yineleyici alır. Öğeyi sildikten sonra, delete() işlevi, sonraki öğeye işaret eden bir yineleyici döndürür.

harita

Aşağıdaki kod segmentini göz önünde bulundurun:

harita mapObj('a',10,'b',20,'c',30,'d',40,'e',50);
harita::yineleyici yineleyici = mapObj.başla();
harita::iteratör itr = mapObj.sil(iter);
cout << "new size: " << mapObj.size() << '\n';
cout << "next value pair: " << (*itr).first <<',' << (*itr).second << "\n";
itr = mapObj.sil(itr);
cout << "new size: " << mapObj.size() << '\n';
cout << "next value pair: " << (*itr).first <<',' << (*itr).second << "\n";

Çıktı:

yeni boyut: 4
sonraki değer çifti: b,20
yeni boyut: 3
sonraki değer çifti: c,30

delete() işlevi, argüman olarak bir öğeye işaret eden bir yineleyici alır. Öğeyi sildikten sonra, delete() işlevi, sonraki öğeye işaret eden bir yineleyici döndürür.

clear() Fonksiyonu

clear() işlevi, listedeki tüm öğeleri kaldırır. Örnek ayarlayın:

Ayarlamak setObj(6, 10, 2, 8, 4);
setObj.açık();
cout << setObj.size() << '\n';

çıktı 0.

harita örneği:

harita mapObj('c',30,'b',20,'d',30,'e',40,'a',10);
haritaObj.açık();
cout << mapObj.size() << '\n';

çıktı 0.

Sonuç:

C++'da küme veri yapısı, öğelerin listesinin varsayılan olarak artan sırada veya programcının seçimine göre azalan sırada depolandığı bir yapıdır. Setin tüm unsurları benzersizdir. C++'daki bir harita veri yapısı, listenin, varsayılan olarak artan anahtar düzeninde veya programcının seçimine göre azalan anahtar düzeninde saklanan, anahtar/değer çiftlerinin bir karması olduğu bir yapıdır. Anahtarlar da benzersizdir ve yinelenen değerler olabilir. Yapılardan herhangi birinin ana veri üyesi listedir. Her iki yapının da bazıları yaygın olarak kullanılan üye işlevleri vardır.

How to reverse Mouse and Touchpads scrolling direction in Windows 10
Mouse and Touchpads not only make computing easy but more efficient and less time-consuming. We cannot imagine a life without these devices, but still...
How to change Mouse pointer and cursor size, color & scheme on Windows 10
The mouse pointer and cursor in Windows 10 are very important aspects of the operating system. This can be said for other operating systems as well, s...
Linux Oyunları Geliştirmek için Ücretsiz ve Açık Kaynaklı Oyun Motorları
Bu makale, Linux'ta 2D ve 3D oyunlar geliştirmek için kullanılabilecek ücretsiz ve açık kaynaklı oyun motorlarının bir listesini kapsayacaktır. Bu tür...