Module ā§Ļ ¡ STL āĻāĻŋāύāĻŋāϏāĻāĻž āĻā§, āĻāϰ āĻāĻāĻž C++ āϞā§āĻāĻžāϰ āϧāϰāύāĻāĻžāĻ āĻĒāĻžāϞā§āĻā§ āĻĻā§āϝāĻŧ āĻā§āύ
container-āĻā§āϞ⧠āĻāĻ āύāĻāϰā§: āĻā§āύāĻāĻž āĻā§ āĻāĻžāĻā§ āĻāĻžāϞā§
āĻāĻ lesson-āĻ āϝāĻž āĻļāĻŋāĻāĻŦā§
- āĻāĻ track āϝ⧠container-āĻā§āϞ⧠āĻļā§āĻāĻžāϝāĻŧ, āϏā§āĻā§āϞā§āĻā§ āϤāĻŋāύāĻāĻž āĻĒāϰāĻŋāĻŦāĻžāϰ⧠āĻāĻžāĻ āĻāϰ⧠āĻŦāϞāϤ⧠āĻĒāĻžāϰāĻŦā§āĨ¤
- āĻĒā§āϰāϤāĻŋāĻāĻž container āĻā§āύ āĻāĻāĻāĻž āĻĒā§āϰāĻļā§āύā§āϰ āĻāϤā§āϤāϰ āϏāĻŦāĻā§āϝāĻŧā§ āĻĻā§āϰā§āϤ āĻĻā§āϝāĻŧ, āϏā§āĻāĻž āĻŦāϞāϤ⧠āĻĒāĻžāϰāĻŦā§āĨ¤
- O(1), O(log n) āĻāϰ O(n) āĻĻāĻŋāϝāĻŧā§ āϞā§āĻāĻž āĻāϰāĻā§āϰ table āĻĒāĻĄāĻŧāϤ⧠āĻĒāĻžāϰāĻŦā§, āĻā§āύ⧠container āĻā§āϤāϰ⧠āĻā§āĻāĻžāĻŦā§ āĻāĻžāĻ āĻāϰ⧠āϏā§āĻāĻž āύāĻž āĻā§āύā§āĻāĨ¤
Kenji Lesson 1 āĻĒāĻĄāĻŧā§ āĻĢā§āϞā§āĻā§, āĻāϰ āϤāĻžāϰ āĻāĻāĻāĻžāĻ āĻĒā§āϰāĻļā§āύ: "āĻā§āύ container āϏāĻŦāĻā§āϝāĻŧā§ āĻĻā§āϰā§āϤ?" Team-āĻ āϏāĻŦāĻā§āϝāĻŧā§ āĻĒāϰāĻŋāώā§āĻāĻžāϰ code āϞā§āĻā§ AmaraāĨ¤ āϏ⧠āĻāϞā§āĻā§ āĻāĻāĻāĻž āĻĒā§āϰāĻļā§āύ āĻāϰā§: "āĻāĻŋāϏ⧠āĻĻā§āϰā§āϤ?"
āϝ⧠container āĻāĻ āϧāĻžāĻĒā§ āĻļā§āώ⧠āϝā§āĻ āĻāϰā§, āĻāĻāĻāĻž āĻŽāĻžāύ āĻā§āĻāĻāϤ⧠āϤāĻžāϰ āĻšāϝāĻŧāϤ⧠āĻĻāĻļ āϞāĻžāĻ āϧāĻžāĻĒ āϞāĻžāĻā§āĨ¤ āϝ⧠container 20 āϧāĻžāĻĒā§ āĻāĻāĻāĻž āĻŽāĻžāύ āĻā§āĻāĻā§ āĻĻā§āϝāĻŧ, āϏ⧠5 āύāĻŽā§āĻŦāϰ āĻāĻžāϝāĻŧāĻāĻžāϝāĻŧ āĻā§ āĻāĻā§ āϏā§āĻāĻž āĻāĻ āĻāϰ⧠āĻŦāϞāϤ⧠āĻĒāĻžāϰ⧠āύāĻžāĨ¤ āĻāĻ lesson-āĻāĻžāĻ Amara-āϰ āĻāϤā§āϤāϰ: āĻĒā§āϰāϤāĻŋāĻāĻž container, āĻā§āύ āĻĒā§āϰāĻļā§āύā§āϰ āĻāύā§āϝ āϏā§āĻāĻž āĻŦāĻžāύāĻžāύā§, āĻāϰ āĻāϰāĻā§āϰ āĻāĻāĻāĻž tableāĨ¤
āĻā§āύā§āĻāĻž āĻā§āϤāϰ⧠āĻā§āĻāĻžāĻŦā§ āĻāĻžāĻ āĻāϰā§, āϏā§āĻāĻž āĻāĻāύāĻ āĻļāĻŋāĻāĻŦā§ āύāĻžāĨ¤ āĻāĻāĻžāϰ āĻāύā§āϝ āĻāĻā§ Module 2 āĻĨā§āĻā§ 10āĨ¤ āĻāĻāĻžāύ⧠āĻĒā§āϰ⧠āϤāĻžāĻāĻāĻž āĻāĻāϏāĻā§āĻā§ āĻĒāĻžāĻŦā§, āϝāĻžāϤ⧠āĻĒāϰā§āϰ āĻĒā§āϰāϤāĻŋāĻāĻž module āĻāĻŽāύ āĻāĻāĻāĻž āĻāĻŦāĻŋ āĻāϰāĻžāĻ āĻāϰā§, āϝā§āĻāĻž āϤā§āĻŽāĻžāϰ āĻŽāĻžāĻĨāĻžāϝāĻŧ āĻāĻā§ āĻĨā§āĻā§āĻ āĻāĻā§āĨ¤
Container-āĻāϰ āϤāĻŋāύāĻāĻž āĻĒāϰāĻŋāĻŦāĻžāϰ
Element-āĻā§āϞ⧠āĻā§āĻāĻžāĻŦā§ āϏāĻžāĻāĻžāϝāĻŧ, āϏā§āĻ āĻšāĻŋāϏāĻžāĻŦā§ container āϤāĻŋāύāĻāĻž āĻĒāϰāĻŋāĻŦāĻžāϰ⧠āĻāĻžāĻ āĻšāϝāĻŧāĨ¤
- Sequence container element-āĻā§āϞ⧠āϰāĻžāĻā§ āĻ āĻŋāĻ āϝ⧠āĻā§āϰāĻŽā§ āϤā§āĻŽāĻŋ āĻĸā§āĻāĻŋāϝāĻŧā§āĻ:
vector,string,array,dequeāĻāϰlistāĨ¤ - Container adaptor āĻāĻāĻāĻž sequence container-āĻā§ āĻŽā§āĻĄāĻŧā§ āϰāĻžāĻā§, āĻāϰ āϤā§āĻŽāĻžāĻā§ āĻļā§āϧ⧠āĻāĻ āĻŦāĻž āĻĻā§āĻ āĻŽāĻžāĻĨāĻž āĻā§āĻāϤ⧠āĻĻā§āϝāĻŧ:
stack,queueāĻāϰpriority_queueāĨ¤ - Associative container element-āĻā§āϞ⧠āϏāĻžāĻāĻžāϝāĻŧ āĻāĻĻā§āϰ āĻŽāĻžāύ āĻĻā§āĻā§, āϝāĻžāϤ⧠āĻāĻāĻāĻž āĻĻā§āϰā§āϤ āĻā§āĻāĻā§ āĻĒāĻžāĻāĨ¤ āĻāϰāĻž āĻšāϞā§
setāĻāϰmap, āĻāĻĻā§āϰmultiāϰā§āĻĒ, āϝā§āĻāĻžāύ⧠āĻāĻāĻ āĻŽāĻžāύ āĻŦāĻžāϰāĻŦāĻžāϰ āϰāĻžāĻāĻž āϝāĻžāϝāĻŧ, āĻāϰ āĻāĻĻā§āϰunorderedāϰā§āĻĒ, āϝā§āĻā§āϞ⧠āĻā§āϰāĻŽā§āϰ āĻŦāĻĻāϞ⧠hashing āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āĨ¤
āĻĒāĻžāϰā§āĻĨāĻā§āϝāĻā§āϞ⧠āϝāĻžāϤ⧠āϏāĻšāĻā§ āĻā§āĻā§ āĻĒāĻĄāĻŧā§, āϤāĻžāĻ āύāĻŋāĻā§āϰ āĻĒā§āϰāϤāĻŋāĻāĻž example āĻāĻāĻ āϤāĻŋāύāĻāĻž āϏāĻāĻā§āϝāĻž āĻāĻāĻ āĻā§āϰāĻŽā§ āĻĸā§āĻāĻžāϝāĻŧ: āĻĒā§āϰāĻĨāĻŽā§ 30, āϤāĻžāϰāĻĒāϰ 10, āϤāĻžāϰāĻĒāϰ 20āĨ¤ āĻā§āϝāĻŧāĻžāϞ āϰāĻžāĻā§, āĻāϰāĻž āĻā§āύ āĻā§āϰāĻŽā§ āĻŦā§āϰāĻŋāϝāĻŧā§ āĻāϏā§āĨ¤ āĻļā§āϧ⧠āĻāĻ āĻā§āϰāĻŽāĻāĻžāĻ āĻĒā§āϰāϤāĻŋāĻāĻž container āϏāĻŽā§āĻĒāϰā§āĻā§ āĻ āύā§āĻ āĻāĻŋāĻā§ āĻŦāϞ⧠āĻĻā§āϝāĻŧāĨ¤
āϝā§āĻā§āύ⧠container declare āĻāϰāĻž
std::vector<int> marks;
std::map<std::string, int> price;
std::vector,std::map: container-āĻāϰ āύāĻžāĻŽ, āϝā§āĻāĻž āĻāϏ⧠āĻāϰ āύāĻŋāĻā§āϰ header āĻĨā§āĻā§ (<vector>,<map>)āĨ¤<int>: āĻāĻāĻž āĻā§āύ type-āĻāϰ element āϧāϰ⧠āϰāĻžāĻā§, angle bracket-āĻāϰ āĻā§āϤāϰ⧠āϞā§āĻāĻžāĨ¤<std::string, int>: map āĻā§āĻĄāĻŧāĻž āϧāϰ⧠āϰāĻžāĻā§, āϤāĻžāĻ āĻāϰ āĻĻā§āĻāĻāĻž type āϞāĻžāĻā§, key āĻāϰ valueāĨ¤marks,price: āύāĻžāĻŽāĻāĻž āϤā§āĻŽāĻŋ āĻŦāĻžāĻā§āĨ¤ āύāϤā§āύ container āĻļā§āϰ⧠āĻšāϝāĻŧ āĻĢāĻžāĻāĻāĻž āĻ āĻŦāϏā§āĻĨāĻžāϝāĻŧāĨ¤
Sequence container: āϝ⧠āĻā§āϰāĻŽā§ āϰā§āĻā§āĻ, āϏā§āĻ āĻā§āϰāĻŽā§
āĻāĻ āĻĒāĻžāĻāĻāĻāĻž āϤā§āĻŽāĻžāϰ element-āĻā§āϞ⧠āĻāĻ āϏāĻžāϰāĻŋāϤ⧠āϰāĻžāĻā§āĨ¤ āĻĒāĻžāϰā§āĻĨāĻā§āϝ āĻšāϞā§, āĻā§āĻĨāĻžāϝāĻŧ āϝā§āĻ āĻāϰāĻž āϏāϏā§āϤāĻž, āĻāϰ size āĻŦāĻĻāϞāĻžāύ⧠āϝāĻžāϝāĻŧ āĻāĻŋ āύāĻžāĨ¤
#include <iostream>
#include <vector>
int main()
{
std::vector<int> v;
v.push_back(30);
v.push_back(10);
v.push_back(20);
std::cout << "vector:";
for (int x : v) std::cout << ' ' << x;
std::cout << " | v[1] = " << v[1] << '\n';
}
vector: 30 10 20 | v[1] = 10
āĻāϰ āĻĒā§āϰāĻļā§āύ: "i āύāĻŽā§āĻŦāϰ āĻāĻžāϝāĻŧāĻāĻžāϝāĻŧ āĻā§ āĻāĻā§?", āĻāϤā§āϤāϰ āĻāĻ āϧāĻžāĻĒā§, āϏāĻā§āĻā§ āĻļā§āώ⧠āϏāϏā§āϤāĻžāϝāĻŧ āϝā§āĻ āĻāϰāĻžāĨ¤ āĻāĻāĻžāĻ default container, āĻāϰ āϏāĻŦāĻžāϰ āĻāĻā§ āĻšāĻžāϤ āĻŦāĻžāĻĄāĻŧāĻžāĻŦā§ āĻāĻāĻžāϰ āĻĻāĻŋāĻā§āĻāĨ¤
Compiler-āĻ āĻāĻžāϞāĻžāĻ#include <iostream>
#include <string>
int main()
{
std::string s = "cat";
s += "fish";
s.push_back('!');
std::cout << "string: " << s << " | size " << s.size() << " | s[0] = " << s[0] << '\n';
}
string: catfish! | size 8 | s[0] = c
āĻāϰ āĻĒā§āϰāĻļā§āύ: vector-āĻāϰāĻāĻžāĻ, āĻļā§āϧ⧠āϞā§āĻāĻžāϰ āĻāύā§āϝāĨ¤ āϞā§āĻāĻž āύāĻŋāϝāĻŧā§ āĻāĻŋāĻā§ āĻāĻžāĻāĻ āĻāĻāĻž āĻāĻžāύā§, āϝā§āĻŽāύ += āĻĻāĻŋāϝāĻŧā§ āĻā§āĻĄāĻŧāĻž āϞāĻžāĻāĻžāύ⧠āĻāϰ āĻāĻāĻāĻž āĻļāĻŦā§āĻĻ āĻā§āĻāĻāĻžāĨ¤ āĻā§āύ⧠'\0' āϏāĻžāĻŽāϞāĻžāϤ⧠āĻšāϝāĻŧ āύāĻž, āĻāĻĒāĻā§ āĻĒāĻĄāĻŧāϤ⧠āĻĒāĻžāϰ⧠āĻāĻŽāύ āĻā§āύ⧠buffer-āĻ āύā§āĻāĨ¤
#include <array>
#include <iostream>
int main()
{
std::array<int, 3> a = {30, 10, 20};
std::cout << "array:";
for (int x : a) std::cout << ' ' << x;
std::cout << " | size is always " << a.size() << '\n';
}
array: 30 10 20 | size is always 3
āĻāϰ āĻĒā§āϰāĻļā§āύ: i āύāĻŽā§āĻŦāϰ āĻāĻžāϝāĻŧāĻāĻž, āĻāĻŽāύ āĻāĻāĻāĻž āϏāĻāĻā§āϝāĻžāϰ āĻāύā§āϝ, āϝā§āĻāĻž program āϞā§āĻāĻžāϰ āϏāĻŽāϝāĻŧāĻ āϤā§āĻŽāĻŋ āĻāĻžāύā§āĨ¤ āĻāĻāĻž āĻāĻŽāύ āĻāĻāĻāĻž C array, āϝā§āĻāĻž āύāĻŋāĻā§āϰ size āĻāĻžāύā§, āĻāϰ āĻāĻāĻā§āĻ āĻŦāĻžāĻĄāĻŧā§ āύāĻžāĨ¤
Compiler-āĻ āĻāĻžāϞāĻžāĻ#include <deque>
#include <iostream>
int main()
{
std::deque<int> d;
d.push_back(30);
d.push_front(10);
d.push_back(20);
std::cout << "deque:";
for (int x : d) std::cout << ' ' << x;
std::cout << " | d[0] = " << d[0] << '\n';
}
deque: 10 30 20 | d[0] = 10
āĻāϰ āĻĒā§āϰāĻļā§āύ: "āϝā§āĻā§āύ⧠āĻŽāĻžāĻĨāĻžāϝāĻŧ āϝā§āĻ āĻāϰ⧠āĻŦāĻž āĻŦāĻžāĻĻ āĻĻāĻžāĻ", āĻĒā§āϰāϤāĻŋāĻāĻž āĻāĻ āϧāĻžāĻĒā§, āĻāϰ i āύāĻŽā§āĻŦāϰ āĻāĻžāϝāĻŧāĻāĻžāĻ āĻĒāĻžāĻāϝāĻŧāĻž āϝāĻžāϝāĻŧāĨ¤ deque (āĻāĻā§āĻāĻžāϰāĻŖ "āĻĄā§āĻ", āĻŽāĻžāύ⧠double-ended queue) āĻšāϞ⧠āĻāĻŽāύ āĻāĻāĻāĻž vector, āϝāĻžāϰ āϏāĻžāĻŽāύ⧠āϝā§āĻ āĻāϰāĻžāĻāĻžāĻ āϏāϏā§āϤāĻžāĨ¤
Compiler-āĻ āĻāĻžāϞāĻžāĻ#include <iostream>
#include <list>
int main()
{
std::list<int> l = {30, 20};
auto it = l.begin();
++it;
l.insert(it, 10);
std::cout << "list:";
for (int x : l) std::cout << ' ' << x;
std::cout << '\n';
}
list: 30 10 20
āĻāϰ āĻĒā§āϰāĻļā§āύ: "āĻ āĻŋāĻ āĻāĻāĻžāύ⧠āĻĸā§āĻāĻžāĻ āĻŦāĻž āĻŦāĻžāĻĻ āĻĻāĻžāĻ", āϝā§āĻāĻžāύ⧠āϤā§āĻŽāĻŋ āĻāĻā§ āĻĨā§āĻā§āĻ āĻĻāĻžāĻāĻĄāĻŧāĻŋāϝāĻŧā§ āĻāĻ, āĻ
āύā§āϝ āĻā§āύ⧠element āύāĻž āϏāϰāĻŋāϝāĻŧā§āĨ¤ "i āύāĻŽā§āĻŦāϰ āĻāĻžāϝāĻŧāĻāĻžāϝāĻŧ āĻā§ āĻāĻā§?", āĻāĻ āĻĒā§āϰāĻļā§āύā§āϰ āĻĻā§āϰā§āϤ āĻāϤā§āϤāϰ āĻāĻāĻž āĻĻāĻŋāϤ⧠āĻĒāĻžāϰ⧠āύāĻž: āĻāϰ āĻā§āύ⧠l[1]-āĻ āύā§āĻāĨ¤ C-āϤ⧠āϤā§āĻŽāĻŋ āĻšāĻžāϤ⧠āϝ⧠linked list āϞāĻŋāĻā§āĻāĻŋāϞā§, āĻāĻāĻž āϏā§āĻāĻžāĻāĨ¤
Adaptor: āĻāĻ āĻĻāϰāĻāĻžāϝāĻŧ āĻĸā§āĻāĻž, āĻāĻ āĻĻāϰāĻāĻžāϝāĻŧ āĻŦā§āϰā§āύā§
Adaptor āĻāĻāĻāĻž sequence container āύā§āϝāĻŧ, āĻāϰ āĻāϰ āĻŦā§āĻļāĻŋāϰāĻāĻžāĻāĻāĻžāĻ āϞā§āĻāĻŋāϝāĻŧā§ āĻĢā§āϞā§āĨ¤ āϝ⧠āĻŽāĻžāĻĨāĻžāĻā§āϞā§āϝāĻŧ āϏ⧠āĻ āύā§āĻŽāϤāĻŋ āĻĻā§āϝāĻŧ, āĻļā§āϧ⧠āϏā§āĻāĻžāύā§āĻ āϤā§āĻŽāĻŋ āϝā§āĻ āĻŦāĻž āĻŦāĻžāĻĻ āĻĻāĻŋāϤ⧠āĻĒāĻžāϰā§āĨ¤ āĻāĻāĻž āĻĻā§āϰā§āĻŦāϞāϤāĻž āύāĻžāĨ¤ āϤā§āĻŽāĻžāϰ problem-āĻ āϝāĻĻāĻŋ āϏāĻŦ āϏāĻŽāϝāĻŧ āĻļā§āϧ⧠āϏāĻŦāĻā§āϝāĻŧā§ āύāϤā§āύ āĻŦāĻž āϏāĻŦāĻā§āϝāĻŧā§ āĻĒā§āϰāύ⧠āĻāĻŋāύāĻŋāϏāĻāĻž āϞāĻžāĻā§, āϤāĻžāĻšāϞ⧠adaptor āĻŦāĻžāĻāĻŋ āϏāĻŦ āϰāĻāĻŽ āĻā§āϞ āĻ āϏāĻŽā§āĻāĻŦ āĻāϰ⧠āĻĻā§āϝāĻŧāĨ¤
#include <iostream>
#include <stack>
int main()
{
std::stack<int> s;
s.push(30);
s.push(10);
s.push(20);
std::cout << "stack pops:";
while (!s.empty()) {
std::cout << ' ' << s.top();
s.pop();
}
std::cout << '\n';
}
stack pops: 20 10 30
āĻāϰ āĻĒā§āϰāĻļā§āύ: "āϏāĻŦāĻžāϰ āĻļā§āώ⧠āĻā§ āϝā§āĻ āĻšāϝāĻŧā§āĻāĻŋāϞ?"āĨ¤ āĻĨāĻžāϞāĻžāϰ āĻāĻāĻāĻž āϏā§āϤā§āĻĒā§āϰ āĻŽāϤā§: āĻļā§āώ⧠āϝā§āĻāĻž āϰāĻžāĻāĻž āĻšāϝāĻŧ, āϏā§āĻāĻžāĻ āĻāĻā§ āύāĻžāĻŽā§āĨ¤ Undo button, āĻāϰ C track-āĻ āϝ⧠C call stack āĻĻā§āĻā§āĻāĻŋāϞā§, āĻĻā§āĻāĻāĻžāĻ āĻāĻāĻžāĻŦā§ āĻāĻžāĻ āĻāϰā§āĨ¤
Compiler-āĻ āĻāĻžāϞāĻžāĻ#include <iostream>
#include <queue>
int main()
{
std::queue<int> q;
q.push(30);
q.push(10);
q.push(20);
std::cout << "queue pops:";
while (!q.empty()) {
std::cout << ' ' << q.front();
q.pop();
}
std::cout << '\n';
}
queue pops: 30 10 20
āĻāϰ āĻĒā§āϰāĻļā§āύ: "āϏāĻŦāĻžāϰ āĻāĻā§ āĻā§ āϝā§āĻ āĻšāϝāĻŧā§āĻāĻŋāϞ?"āĨ¤ āĻĻā§āĻāĻžāύā§āϰ āĻāĻžāĻāύā§āĻāĻžāϰā§āϰ āϞāĻžāĻāύā§āϰ āĻŽāϤā§: āϝ⧠āĻāĻā§ āĻāϏā§āĻā§, āϏ⧠āĻāĻā§ āĻĒāĻžāϝāĻŧāĨ¤
Compiler-āĻ āĻāĻžāϞāĻžāĻ#include <iostream>
#include <queue>
int main()
{
std::priority_queue<int> pq;
pq.push(30);
pq.push(10);
pq.push(20);
std::cout << "priority_queue pops:";
while (!pq.empty()) {
std::cout << ' ' << pq.top();
pq.pop();
}
std::cout << '\n';
}
priority_queue pops: 30 20 10
āĻāϰ āĻĒā§āϰāĻļā§āύ: "āĻāĻ āĻŽā§āĻšā§āϰā§āϤ⧠āϏāĻŦāĻā§āϝāĻŧā§ āĻŦāĻĄāĻŧ āĻā§āύāĻāĻž?", āύāϤā§āύ element āĻāϏāϤ⧠āĻĨāĻžāĻāϞā§āĻāĨ¤ āĻšāĻžāϏāĻĒāĻžāϤāĻžāϞā§āϰ emergency-āϰ āĻŽāϤā§: āϝāĻžāϰ āĻ āĻŦāϏā§āĻĨāĻž āϏāĻŦāĻā§āϝāĻŧā§ āĻāϰā§āϰāĻŋ, āϏ⧠āĻāĻā§ āϝāĻžāϝāĻŧ, āĻā§ āĻāĻā§ āĻāϏā§āĻā§ āϤāĻžāϤ⧠āĻāĻŋāĻā§ āϝāĻžāϝāĻŧ āĻāϏ⧠āύāĻžāĨ¤
Compiler-āĻ āĻāĻžāϞāĻžāĻAssociative container: āĻŽāĻžāύ āĻĻāĻŋāϝāĻŧā§ āĻā§āĻāĻāĻž
āĻāϰāĻž āϤā§āĻŽāĻžāϰ āĻā§āϰāĻŽ āĻāĻāĻĻāĻŽāĻ āϰāĻžāĻā§ āύāĻžāĨ¤ āĻāϰāĻž element āĻāĻŽāύāĻāĻžāĻŦā§ āϏāĻžāĻāĻžāϝāĻŧ, āϝāĻžāϤ⧠"āĻāĻ āĻŽāĻžāύāĻāĻž āĻāĻŋ āĻāĻā§?" āĻĒā§āϰāĻļā§āύāĻāĻžāϰ āĻāϤā§āϤāϰ āĻĻā§āϰā§āϤ āĻŽā§āϞā§āĨ¤ āĻā§āϰāĻŽ āϰāĻžāĻāĻž container-āĻā§āϞ⧠(set, map) element āϏāĻžāĻāĻŋāϝāĻŧā§ āϰāĻžāĻā§; unordered-āĻā§āϞ⧠āĻāĻĄāĻŧā§ āĻāϰ⧠āĻĻā§āϰā§āϤ āĻšāĻāϝāĻŧāĻžāϰ āĻāύā§āϝ āĻā§āϰāĻŽāĻāĻž āĻā§āĻĄāĻŧā§ āĻĻā§āϝāĻŧāĨ¤
#include <iostream>
#include <set>
int main()
{
std::set<int> s = {30, 10, 20, 10};
std::multiset<int> m = {30, 10, 20, 10};
std::cout << "set:";
for (int x : s) std::cout << ' ' << x;
std::cout << " | multiset:";
for (int x : m) std::cout << ' ' << x;
std::cout << " | is 20 in the set? " << s.count(20) << '\n';
}
set: 10 20 30 | multiset: 10 10 20 30 | is 20 in the set? 1
āĻāϰ āĻĒā§āϰāĻļā§āύ: "x āĻāĻŋ āĻāĻā§?", āĻĻā§āϰā§āϤ, āĻāϰ āϏāĻŦāĻāĻŋāĻā§ āϏāĻžāĻāĻžāύ⧠āĻĨāĻžāĻā§āĨ¤ set āĻĒā§āϰāϤāĻŋāĻāĻž āĻŽāĻžāύā§āϰ āĻāĻāĻāĻžāĻ āĻāĻĒāĻŋ āϰāĻžāĻā§, āϤāĻžāĻ āĻĻā§āĻŦāĻŋāϤā§āϝāĻŧ 10-āĻāĻž āĻŦāĻžāĻĻ āĻĒāĻĄāĻŧā§āĻā§āĨ¤ multiset āĻāĻāĻ āĻŽāĻžāύ āĻŦāĻžāϰāĻŦāĻžāϰ āϰāĻžāĻā§āĨ¤
#include <iostream>
#include <map>
#include <string>
int main()
{
std::map<std::string, int> price;
price["tea"] = 30;
price["bun"] = 10;
price["egg"] = 20;
std::cout << "map:";
for (const auto& p : price) std::cout << ' ' << p.first << '=' << p.second;
std::cout << " | egg costs " << price["egg"] << '\n';
}
map: bun=10 egg=20 tea=30 | egg costs 20
āĻāϰ āĻĒā§āϰāĻļā§āύ: "āĻāĻ key-āĻāϰ āϏāĻā§āĻā§ āĻā§ āĻāĻā§?"āĨ¤ map āĻšāϞ⧠āĻāĻŋāĻā§ key-āĻāϰ āĻāĻāĻāĻž set, āĻĒā§āϰāϤāĻŋāĻāĻž key āĻāĻāĻāĻž āĻāϰ⧠value āĻŦāϝāĻŧā§ āĻŦā§āĻĄāĻŧāĻžāϝāĻŧ, āĻāϰ āϏāĻŦ key āĻ
āύā§āϝāĻžāϝāĻŧā§ āϏāĻžāĻāĻžāύ⧠āĻĨāĻžāĻā§: bun āϏāĻŦāĻžāϰ āĻāĻā§ āĻŦā§āϰā§āϝāĻŧ, āĻāĻžāϰāĻŖ āĻŦāϰā§āĻŖāĻŽāĻžāϞāĻžāϝāĻŧ āĻāĻāĻžāĻ āĻĒā§āϰāĻĨāĻŽāĨ¤ multimap-āĻ āĻāĻāĻāĻž key āĻāĻāĻžāϧāĻŋāĻāĻŦāĻžāϰ āĻĨāĻžāĻāϤ⧠āĻĒāĻžāϰā§āĨ¤
#include <iostream>
#include <string>
#include <unordered_map>
#include <unordered_set>
int main()
{
std::unordered_set<int> seen = {30, 10, 20};
std::unordered_map<std::string, int> stock = {{"tea", 30}, {"bun", 10}};
std::cout << "unordered_set:";
for (int x : seen) std::cout << ' ' << x;
std::cout << " | is 10 seen? " << seen.count(10);
std::cout << " | buns in stock: " << stock["bun"] << '\n';
}
unordered_set: 20 10 30 | is 10 seen? 1 | buns in stock: 10
āĻāϰ āĻĒā§āϰāĻļā§āύ: set āĻāϰ map-āĻāϰāĻāĻžāĻ, āĻāĻĄāĻŧā§ āĻāϰ⧠āĻĻā§āϰā§āϤ, āϝāĻāύ element-āĻā§āϞ⧠āĻāĻāύ⧠āĻā§āϰāĻŽā§ āϞāĻžāĻā§ āύāĻžāĨ¤ āĻāϰāĻž āϝ⧠āĻā§āϰāĻŽā§ āĻāĻžāĻĒā§, āϏā§āĻāĻž āĻāϏ⧠hashing āĻĨā§āĻā§, āϤā§āĻŽāĻžāϰ āĻāĻžāĻ āĻĨā§āĻā§ āύāĻž, sort āĻĨā§āĻā§āĻ āύāĻžāĨ¤ āĻ āύā§āϝ compiler-āĻāϰ library āĻšāϝāĻŧāϤ⧠āĻ āύā§āϝ āĻā§āϰāĻŽā§ āĻāĻžāĻĒāĻŦā§, āϤāĻžāĻ āĻāĻ āĻā§āϰāĻŽā§āϰ āĻāĻĒāϰ āĻāĻāύ⧠āĻāϰāϏāĻž āĻā§āϰ⧠āύāĻžāĨ¤
Compiler-āĻ āĻāĻžāϞāĻžāĻāĻāϰāĻā§āϰ table
āĻāĻ track-āĻ āĻāϰāĻ āϞā§āĻāĻž āĻšāϝāĻŧ big-O notation-āĻ, āϝā§āĻāĻžāύ⧠n āĻšāϞ⧠container-āĻ āĻāϝāĻŧāĻāĻž element āĻāĻā§āĨ¤ āĻāĻĒāĻžāϤāϤ āĻāϰ āϤāĻŋāύāĻāĻž āĻāĻžāύāϞā§āĻ āĻāϞāĻŦā§, āύāĻŋāĻā§ āϏā§āĻāĻž āĻāĻžāώāĻžāϝāĻŧ āĻŦāϞāĻž āĻšāϞā§āĨ¤
O(1), constant: n āĻŦāĻžāĻĄāĻŧāϞā§āĻ āĻāϰāĻ āĻŦāĻžāĻĄāĻŧā§ āύāĻžāĨ¤ 10āĻāĻž element-āĻ āĻāĻ āϧāĻžāĻĒ, āĻāĻ āĻā§āĻāĻŋ element-āĻāĻ āĻāĻ āϧāĻžāĻĒāĨ¤O(log n), logarithmic: āĻāϰāĻ āĻŦāĻžāĻĄāĻŧā§ āϧā§āϰā§āĨ¤ n āĻĻā§āĻŦāĻŋāĻā§āĻŖ āĻšāϞ⧠āĻŽā§āĻāĻžāĻŽā§āĻāĻŋ āĻāĻ āϧāĻžāĻĒ āĻŦāĻžāĻĄāĻŧā§, āϤāĻžāĻ āĻĻāĻļ āϞāĻžāĻ element-āĻ āϞāĻžāĻā§ āĻĒā§āϰāĻžāϝāĻŧ 20 āϧāĻžāĻĒāĨ¤O(n), linear: n āϝāϤ āĻŦāĻžāĻĄāĻŧā§, āĻāϰāĻāĻ āϤāϤ āĻŦāĻžāĻĄāĻŧā§āĨ¤ āĻĻāĻļ āĻā§āĻŖ element, āĻĻāĻļ āĻā§āĻŖ āĻāĻžāĻāĨ¤
āĻāĻŦāĻžāϰ table-āĻāĻžāĨ¤ āĻāĻāĻāĻž āϏāĻžāϰāĻŋ āĻāĻāĻžāĻŦā§ āĻĒāĻĄāĻŧā§: "āĻāĻ container-āĻā§ āĻāĻ āĻĒā§āϰāĻļā§āύ āĻāϰāϞ⧠āĻāϰāĻ āĻāϤāĻāĻž"āĨ¤ āĻāĻāĻāĻž dash (-) āĻŽāĻžāύ⧠container-āĻāĻž āĻāĻ āĻāĻžāĻāĻāĻž āĻĻā§āϝāĻŧāĻ āύāĻžāĨ¤ āĻļā§āώ āϤāĻŋāύāĻāĻž āϏāĻžāϰāĻŋāϤ⧠"āϝā§āĻ" āĻāϰāĻžāϰ āĻā§āύ⧠āĻļā§āώ āĻŦāĻž āϏāĻžāĻŽāύ⧠āύā§āĻāĨ¤ āĻāĻāĻāĻž element āϝāĻžāϝāĻŧ āĻāϰ āĻŽāĻžāύ āϝā§āĻāĻžāύ⧠āĻŦāϞ⧠āϏā§āĻāĻžāύā§, āϤāĻžāĻ āϝā§āĻ āĻāϰāĻžāϰ āĻāϰāĻ āĻŦāϏāĻžāύ⧠āĻšāϝāĻŧā§āĻā§ āĻĒā§āϰāĻĨāĻŽ column-āĻāĨ¤ Amortised āĻŽāĻžāύ⧠"āĻ āύā§āĻāĻŦāĻžāϰ call āĻāϰāϞ⧠āĻāĻĄāĻŧā§"; Lesson 5 āĻāĻāĻž āĻŦā§āĻāĻŋāϝāĻŧā§ āĻŦāϞāĻŦā§āĨ¤
| Container | āĻļā§āώ⧠āϝā§āĻ | āϏāĻžāĻŽāύ⧠āϝā§āĻ | āĻŽāĻžāĻā§ āϝā§āĻ | āĻāĻāĻāĻž āĻŽāĻžāύ āĻā§āĻāĻāĻž | i āύāĻŽā§āĻŦāϰ element | āϏāĻžāĻāĻžāύ⧠āĻā§āϰāĻŽā§ āĻĒā§āϰā§āĻāĻž āĻā§āϰāĻž |
|---|---|---|---|---|---|---|
vector, string | O(1) amortised | O(n) | O(n) | O(n) | O(1) | āύāĻž |
array | - | - | - | O(n) | O(1) | āύāĻž |
deque | O(1) | O(1) | O(n) | O(n) | O(1) | āύāĻž |
list | O(1) | O(1) | O(1), āϝā§āĻāĻžāύ⧠āĻĻāĻžāĻāĻĄāĻŧāĻŋāϝāĻŧā§ āĻāĻ | O(n) | O(n) | āύāĻž |
stack | O(1), āĻļā§āϧ⧠top-āĻ | - | - | - | - | āύāĻž |
queue | O(1) | - | - | - | - | āύāĻž |
priority_queue | O(log n), āύāĻŋāĻā§āϰ āĻāĻžāϝāĻŧāĻāĻžāϝāĻŧ āĻāĻŋāϝāĻŧā§ āĻŦāϏ⧠| - | - | āĻļā§āϧ⧠āϏāĻŦāĻā§āϝāĻŧā§ āĻŦāĻĄāĻŧāĻāĻž, O(1) | - | āύāĻž |
set, map āĻāϰ āĻāĻĻā§āϰ multi āϰā§āĻĒ | O(log n), āϏāĻžāĻāĻžāύ⧠āĻāĻžāϝāĻŧāĻāĻžāϝāĻŧ āĻāĻŋāϝāĻŧā§ āĻŦāϏ⧠| - | - | O(log n) | - | āĻšā§āϝāĻžāĻ, āϏāĻŦāĻā§āϞā§āϰ āĻāύā§āϝ O(n) |
unordered_set, unordered_map | āĻāĻĄāĻŧā§ O(1) | - | - | āĻāĻĄāĻŧā§ O(1) | - | āύāĻž |
Table-āĻāϰ āĻĻā§āĻāĻāĻž āϞāĻžāĻāύ āĻāϰā§āĻāĻŦāĻžāϰ āĻĻā§āĻāĻžāϰ āĻŽāϤā§āĨ¤ list āĻŽāĻžāĻāĻāĻžāύ⧠O(1)-āĻ āϝā§āĻ āĻāϰā§, āĻāĻŋāύā§āϤ⧠āĻļā§āϧ⧠āϤāĻāύāĻ, āϝāĻāύ āϤā§āĻŽāĻŋ āĻāĻāĻžāύ⧠āĻĻāĻžāĻāĻĄāĻŧāĻŋāϝāĻŧā§ āĻāĻ; āĻāĻžāϝāĻŧāĻāĻžāĻāĻž āĻĒāϰā§āϝāύā§āϤ āĻšā§āĻāĻā§ āϝā§āϤ⧠āϞāĻžāĻā§ O(n)āĨ¤ āĻāϰ unordered container-āĻā§āϞā§āϰ "āĻāĻĄāĻŧā§" āĻāĻĨāĻžāĻāĻž āĻāĻāĻāĻž āϏāϤā§āϝāĻŋāĻāĻžāϰā§āϰ āĻļāϰā§āϤ: āĻāĻžāϰāĻžāĻĒ data āĻĒā§āϞ⧠āĻāĻĻā§āϰ O(1) āĻšāϝāĻŧā§ āϝāĻžāϝāĻŧ O(n)āĨ¤ āϏā§āĻ data āĻĻā§āĻāϤ⧠āĻā§āĻŽāύ, Module 10 āĻĻā§āĻāĻžāĻŦā§āĨ¤
āϤāĻžāĻ "āĻā§āύāĻāĻž āϏāĻŦāĻā§āϝāĻŧā§ āĻĻā§āϰā§āϤ?" āĻĒā§āϰāĻļā§āύā§āϰ āĻā§āύ⧠āĻāϤā§āϤāϰ āύā§āĻāĨ¤ āĻāĻŋāύā§āϤ⧠"key āĻĻāĻŋāϝāĻŧā§ āĻā§āĻāĻāĻžāϝāĻŧ āϏāĻŦāĻā§āϝāĻŧā§ āĻĻā§āϰā§āϤ, āϏāĻžāĻāĻžāύ⧠āĻā§āϰāĻŽā§?" āĻĒā§āϰāĻļā§āύā§āϰ āĻāĻāĻāĻž āĻāϤā§āϤāϰ āĻāĻā§: mapāĨ¤ Amara-āϰ āĻĒā§āϰ⧠āĻāĻĨāĻžāĻāĻž āĻāĻāĻžāĻāĨ¤
āĻāĻāĻž āĻā§āĻĨāĻžāϝāĻŧ āĻāĻžāĻā§ āϞāĻžāĻāĻā§
- Linux-āĻāϰ CFS scheduler. Kernel 2.6.23 āĻĨā§āĻā§ 6.5 āĻĒāϰā§āϝāύā§āϤ scheduler āĻāϞāĻžāϰ āĻāύā§āϝ āϤā§āϰāĻŋ task-āĻā§āϞ⧠āĻāĻāĻāĻž red-black tree-āϤ⧠āϰāĻžāĻāϤ, āĻā§ āĻāϤāĻāĻž CPU āϏāĻŽāϝāĻŧ āĻāϰāĻ āĻāϰā§āĻā§ āϏā§āĻ āĻā§āϰāĻŽā§āĨ¤ GCC-āϰ library āĻ āĻŋāĻ āĻāĻ balanced tree-āϰ āĻāĻĒāϰā§āĻ
std::setāĻāϰstd::mapāĻŦāĻžāύāĻžāϝāĻŧāĨ¤ - Redis sorted set. Game-āĻāϰ leaderboard āĻŦāĻžāύāĻžāύā§āϰ āĻā§āύāĻž āĻāĻĒāĻžāϝāĻŧāĨ¤ āĻāϰāĻž member-āĻĻā§āϰ score āĻ
āύā§āϝāĻžāϝāĻŧā§ āϏāĻžāĻāĻŋāϝāĻŧā§ āϰāĻžāĻā§, āĻāĻŦāĻžāϰ āύāĻžāĻŽ āĻĻāĻŋāϝāĻŧā§ āĻāĻāĻāύ member-āĻā§ āĻĻā§āϰā§āϤ āĻā§āĻāĻā§āĻ āĻĻā§āϝāĻŧāĨ¤ āĻāĻ āĻĻā§āĻāĻāĻž āĻĒā§āϰāĻļā§āύā§āϰ āĻāϤā§āϤāϰāĻ āĻĻā§āϝāĻŧ āĻāĻāĻāĻž
map, āĻāϰ Redis āĻāĻā§āϞā§āϰ āĻāύā§āϝ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻāĻāĻž skip list āĻāϰ āĻāĻāĻāĻž hash tableāĨ¤ - Hunspell. LibreOffice āĻāϰ Firefox āϝ⧠spell checker āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§, āϏā§āĻāĻž āύāĻŋāĻā§āϰ dictionary āĻāĻāĻāĻž hash table-āĻ load āĻāϰā§āĨ¤ "āĻāĻ āĻļāĻŦā§āĻĻāĻāĻž āĻāĻŋ dictionary-āϤ⧠āĻāĻā§?", āĻāĻāĻžāĻ
unordered_set-āĻāϰ āĻĒā§āϰāĻļā§āύ, āĻāϰ āϤā§āĻŽāĻŋ āϝāϤ āĻļāĻŦā§āĻĻ āĻāĻžāĻāĻĒ āĻāϰā§, āĻĒā§āϰāϤāĻŋāĻāĻžāϰ āĻāύā§āϝ āĻāĻāĻŦāĻžāϰ āĻāϰ⧠āĻāĻāĻž āĻāĻŋāĻā§āĻā§āϏ āĻāϰāĻž āĻšāϝāĻŧāĨ¤ - Emacs āĻāϰ VS Code. Text editor āϏāĻžāϰāĻžāĻā§āώāĻŖ āϞā§āĻāĻžāϰ āĻŽāĻžāĻāĻāĻžāύ⧠āĻāĻŋāĻā§ āĻĸā§āĻāĻžāϝāĻŧ, āĻāϰ āĻ āĻŋāĻ āĻāĻ āĻāĻāĻāĻž āĻāĻžāĻā§āĻ āϏāĻžāϧāĻžāϰāĻŖ
vectorāϧā§āϰāĨ¤ Emacs āϰāĻžāĻā§ āĻāĻāĻāĻž gap buffer, āĻāϰ VS Code āĻāĻāĻāĻž piece tree, āĻĻā§āĻāĻāĻžāĻ āĻŦāĻžāύāĻžāύ⧠āĻāĻ āĻĸā§āĻāĻžāύā§āĻāĻž āϏāϏā§āϤāĻž āĻāϰāĻžāϰ āĻāύā§āϝāĨ¤
āϝ⧠āĻā§āϞāĻā§āϞ⧠āϏāĻŦāĻžāĻ āĻāϰā§
ā§§. āϝ⧠container-āĻ āĻāĻžāϝāĻŧāĻāĻžāϰ āύāĻŽā§āĻŦāϰ āύā§āĻ, āϏā§āĻāĻžāύ⧠index āĻĻāĻŋāϝāĻŧā§ āĻĸā§āĻāĻžāĨ¤
std::stack<int> s;
s.push(1);
std::cout << s[0] << "\n";
GCC 12 āĻŦāϞ⧠error: no match for 'operator[]' (operand types are 'std::stack<int>' and 'int')āĨ¤ Stack āĻļā§āϧ⧠āĻāϰ top āĻĻā§āĻāĻžāϝāĻŧ, s.top() āĻĻāĻŋāϝāĻŧā§āĨ¤ list, set āĻāϰ queue-āĻāϰ āĻŦā§āϞāĻžāϤā§āĻ āĻāĻāĻ message āĻāϏā§āĨ¤ i āύāĻŽā§āĻŦāϰ āĻāĻžāϝāĻŧāĻāĻž āϞāĻžāĻāϞ⧠āϤā§āĻŽāĻžāϰ āϞāĻžāĻāĻŦā§ vector, deque āĻŦāĻž arrayāĨ¤
⧍. Unordered container āϏāĻžāĻāĻžāύ⧠āĻ āĻŦāϏā§āĻĨāĻžāϝāĻŧ āĻŦā§āϰā§āĻŦā§, āĻāĻāĻž āĻāĻļāĻž āĻāϰāĻžāĨ¤
Example 11-āĻ āĻĸā§āĻāĻžāύ⧠āĻšāϝāĻŧā§āĻāĻŋāϞ 30, 10, 20, āĻāϰ āĻāĻžāĻĒāĻž āĻšāϞ⧠20 10 30āĨ¤ āĻāĻ āĻā§āϰāĻŽāĻāĻž āϤā§āĻŽāĻžāϰāĻ āύāĻž, āϏāĻžāĻāĻžāύā§āĻ āύāĻž, āĻāϰ container āĻŦāĻĄāĻŧ āĻšāϞ⧠āĻāĻāĻž āĻŦāĻĻāϞā§āĻ āϝā§āϤ⧠āĻĒāĻžāϰā§āĨ¤ Output āϝāĻĻāĻŋ āĻā§āϰāĻŽā§ āϞāĻžāĻā§āĻ, set āĻŦāĻž map āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§, āύāϝāĻŧāϤ⧠element-āĻā§āϞ⧠āĻāĻāĻāĻž vector-āĻ āĻāĻĒāĻŋ āĻāϰ⧠sort āĻāϰā§āĨ¤
ā§Š. āĻļā§āϧ⧠āĻāϤāĻŋ āĻĻā§āĻā§ āĻŦāĻžāĻāĻžāĨ¤
Kenji āĻāĻāĻāĻž leaderboard āĻŦāĻžāύāĻžāϝāĻŧ unordered_map āĻĻāĻŋāϝāĻŧā§, āĻāĻžāϰāĻŖ āĻāĻāĻž "āϏāĻŦāĻā§āϝāĻŧā§ āĻĻā§āϰā§āϤ"āĨ¤ āϤāĻžāϰāĻĒāϰ āĻĻā§āĻā§, āĻĒā§āϰāϤāĻŋāĻāĻž game-āĻāϰ āĻĒāϰ āϤāĻžāĻā§ āϏā§āϰāĻž āĻĻāĻļāĻāύāĻā§ āĻā§āϰāĻŽ āĻ
āύā§āϝāĻžāϝāĻŧā§ āĻāĻžāĻĒāĻžāϤ⧠āĻšāĻŦā§āĨ¤ āĻĻā§āϰā§āϤ āĻā§āĻāĻāĻž āϤāĻžāϰ āĻā§āύ⧠āĻāĻžāĻā§ āĻāϏ⧠āύāĻž, āĻāϰ āĻĒā§āϰāϤāĻŋāĻŦāĻžāϰ āĻĒā§āϰ⧠board sort āĻāϰāϤ⧠āĻšāϝāĻŧāĨ¤ Table āϝā§āĻŽāύ āĻāϰā§, āϤā§āĻŽāĻŋāĻ āĻĒā§āϰāĻļā§āύ āĻĨā§āĻā§ āĻļā§āϰ⧠āĻāϰā§, container āύāĻŋāĻā§āĻ āĻŦāĻžāĻāĻžāĻ āĻšāϝāĻŧā§ āϝāĻžāĻŦā§āĨ¤
Example 1, 6, 7, 8 āĻāϰ 9-āĻāϰ output āĻĻā§āĻā§āĨ¤ āĻĒāĻžāĻāĻāĻāĻž container-āĻā§āĻ 30, 10, 20 āĻ āĻŋāĻ āĻāĻ āĻā§āϰāĻŽā§ āĻĻā§āĻāϝāĻŧāĻž āĻšāϝāĻŧā§āĻāĻŋāϞāĨ¤ āĻĒā§āϰāϤāĻŋāĻāĻžāϰ āĻāύā§āϝ āĻāĻ āĻŦāĻžāĻā§āϝ⧠āϞā§āĻā§, āϏāĻāĻā§āϝāĻžāĻā§āϞ⧠āĻā§āύ āĻāĻ āĻā§āϰāĻŽā§ āĻŦā§āϰā§āϞāĨ¤
āύāĻŋāĻā§ āϝāĻžāĻāĻžāĻ āĻāϰā§āĨ¤ āĻĒāĻžāĻāĻāĻāĻž āĻāϞāĻžāĻĻāĻž āĻāĻžāϰāĻŖ āĻĒāĻžāĻāϝāĻŧāĻžāϰ āĻāĻĨāĻž: āϝ⧠āĻā§āϰāĻŽā§ āϝā§āĻ āĻāϰā§āĻ, āϏāĻŦāĻā§āϝāĻŧā§ āύāϤā§āύāĻāĻž āĻāĻā§, āϏāĻŦāĻā§āϝāĻŧā§ āĻĒā§āϰāύā§āĻāĻž āĻāĻā§, āϏāĻŦāĻā§āϝāĻŧā§ āĻŦāĻĄāĻŧāĻāĻž āĻāĻā§, āĻāϰ āϏāĻžāĻāĻžāύā§āĨ¤
Example 10 Playground-āĻ āĻā§āϞā§āĨ¤ Egg-āĻāϰ āϞāĻžāĻāύā§āϰ āĻĒāϰ⧠āĻāϤā§āϰā§āĻĨ āĻāĻāĻāĻž item āϝā§āĻ āĻāϰā§: price["apple"] = 50;āĨ¤ āĻāĻžāϞāĻžāύā§āϰ āĻāĻā§ āϞāĻŋāĻā§ āϰāĻžāĻā§, āĻā§āύ āϞāĻžāĻāύāĻāĻž āĻāĻļāĻž āĻāϰāĻāĨ¤
āύāĻŋāϝāĻŧāĻŽāĨ¤ āϤāĻžāϰāĻĒāϰ std::map āĻŦāĻĻāϞ⧠std::unordered_map āĻāϰā§, āĻāϰ #include <unordered_map> āϝā§āĻ āĻāϰā§āĨ¤ āĻāĻŦāĻžāϰ āĻāĻžāϞāĻžāĻ, āĻāϰ āĻā§āϰāĻŽāĻāĻž āĻŽāĻŋāϞāĻŋāϝāĻŧā§ āĻĻā§āĻā§āĨ¤
āύāĻŋāĻā§ āϝāĻžāĻāĻžāĻ āĻāϰā§āĨ¤ Map-āĻ apple=50 āϏāĻŦāĻžāϰ āĻāĻā§ āĻāϏā§āĨ¤ Unordered map-āĻ āĻā§āϰāĻŽāĻāĻž hashing āϝāĻž āĻĻā§āϝāĻŧ āϤāĻžāĻ, āĻāϰ āϏā§āĻāĻž āĻŦāϰā§āĻŖāĻŽāĻžāϞāĻžāϰ āĻā§āϰāĻŽ āύāĻžāĨ¤
āĻāĻāĻāĻž web browser-āĻ āĻāĻāĻāĻž Back button āĻāϰ āĻāĻāĻāĻž Forward button āĻāĻā§āĨ¤ āύāϤā§āύ page-āĻ āĻā§āϞ⧠Forward-āĻāϰ history āĻŽā§āĻā§ āϝāĻžāϝāĻŧāĨ¤ āĻā§āύ container, āĻŦāĻž āĻā§āύ āĻā§āύ container āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦā§ āĻŦāĻžāĻā§, āĻāϰ table āĻĻā§āĻāĻŋāϝāĻŧā§ āĻāĻ āĻ āύā§āĻā§āĻā§āĻĻā§ āϤā§āĻŽāĻžāϰ āĻĒāĻāύā§āĻĻāĻāĻž āĻŦā§āĻāĻŋāϝāĻŧā§ āĻŦāϞā§āĨ¤
āύāĻŋāϝāĻŧāĻŽāĨ¤ Back āĻāĻžāĻĒāϞā§, Forward āĻāĻžāĻĒāϞ⧠āĻāϰ āύāϤā§āύ page-āĻ āĻā§āϞ⧠āĻĒā§āϰāϤāĻŋāĻāĻž container-āĻāϰ āĻā§ āĻšāϝāĻŧ, āϏā§āĻāĻž āĻŦāϞā§āĨ¤
āύāĻŋāĻā§ āϝāĻžāĻāĻžāĻ āĻāϰā§āĨ¤ āĻāĻāĻāĻž āĻāĻžāϞ⧠āĻāϤā§āϤāϰ āĻšāϞ⧠āĻĻā§āĻāĻāĻž stack: Back āĻāĻāĻāĻž āĻĨā§āĻā§ pop āĻāϰ⧠āĻ
āύā§āϝāĻāĻžāϝāĻŧ push āĻāϰā§, āĻāϰ āύāϤā§āύ page Forward stack-āĻāĻž āĻāĻžāϞāĻŋ āĻāϰ⧠āĻĻā§āϝāĻŧāĨ¤ āĻāĻāĻāĻž position āϏāĻš āĻāĻāĻāĻž deque-āĻ āĻāϞā§āĨ¤ āϝā§āĻāĻžāĻŦā§āĻ āĻāϰā§, āĻĒā§āϰāϤāĻŋāĻāĻž āĻāĻžāĻ O(1)āĨ¤
āϝ⧠āĻĒā§āϰāĻļā§āύāĻā§āϞ⧠āϏāĻŦāĻžāϰ āĻŽāύ⧠āĻāϏā§
āĻāĻ table āĻāĻŋ āĻŽā§āĻāϏā§āĻĨ āĻāϰāϤ⧠āĻšāĻŦā§?
āύāĻžāĨ¤ Module 10 āĻļā§āώ āĻšāϤ⧠āĻšāϤ⧠āϤā§āĻŽāĻŋ āĻĒā§āϰāϤāĻŋāĻāĻž āϏāĻžāϰāĻŋ āĻāĻžāύāĻŦā§, āĻāĻžāϰāĻŖ āϤāĻāύ āĻŦā§āĻāĻŦā§ āĻĒā§āϰāϤāĻŋāĻāĻž container āĻā§āĻāĻžāĻŦā§ āĻŦāĻžāύāĻžāύā§āĨ¤ āĻāĻĒāĻžāϤāϤ page-āĻāĻž āĻā§āϞāĻž āϰāĻžāĻā§, āĻāϰ āĻŦāĻžāĻāĻžāϰ āϏāĻŽāϝāĻŧ āĻāĻāĻž āĻĻā§āĻā§ āύāĻžāĻāĨ¤
stack āĻāϰ queue-āĻā§ container āύāĻž āĻŦāϞ⧠adaptor āĻŦāϞ⧠āĻā§āύ?
āĻāĻžāϰāĻŖ āĻāϰāĻž āύāĻŋāĻā§āϰāĻž āĻāĻŋāĻā§āĻ āϧāϰ⧠āϰāĻžāĻā§ āύāĻžāĨ¤ Default āĻšāĻŋāϏā§āĻŦā§ āĻāĻāĻāĻž
stack-āĻāϰ āύāĻŋāĻā§ āĻāϏāϞ⧠āĻāĻāĻāĻždequeāĻĨāĻžāĻā§, top āĻāĻžāĻĄāĻŧāĻž āĻŦāĻžāĻāĻŋ āϏāĻŦ āĻāĻžāĻ āϞā§āĻāĻŋāϝāĻŧā§ āϰāĻžāĻāĻžāĨ¤ āύāĻŋāĻā§ āĻā§ āĻĨāĻžāĻāĻŦā§ āϏā§āĻāĻž āĻā§āĻāĻžāĻŦā§ āĻŦāĻžāĻāĻŦā§, Module 6 āĻĻā§āĻāĻžāĻŦā§āĨ¤unordered_map āϝāĻĻāĻŋ O(1) āĻāϰ map O(log n) āĻšāϝāĻŧ, āϤāĻžāĻšāϞ⧠map āĻā§āύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦ?
āĻāĻžāϰāĻŖ map āĻāϰ key-āĻā§āϞ⧠āϏāĻžāĻāĻŋāϝāĻŧā§ āϰāĻžāĻā§, āĻāϰ āĻāĻŋāĻā§ āĻāĻžāĻā§ āĻāĻ āĻā§āϰāĻŽāĻāĻž āϞāĻžāĻā§āĨ¤ āϤāĻžāĻāĻžāĻĄāĻŧāĻž āĻĻāĻļ āϞāĻžāĻ key-āĻāϰ āĻāύā§āϝ O(log n) āĻŽāĻžāύ⧠āĻĒā§āϰāĻžāϝāĻŧ 20 āϧāĻžāĻĒ, āϝā§āĻāĻž āĻāĻŽāύāĻŋāϤā§āĻ āĻā§āĻŦ āĻĻā§āϰā§āϤāĨ¤ āĻāϰ table āϝā§āĻŽāύ āĻŦāϞā§, unordered map-āĻāϰ O(1) āĻļā§āϧ⧠āĻāĻāĻāĻž āĻāĻĄāĻŧāĨ¤
std::string āĻāĻŋ āϏāϤā§āϝāĻŋāĻ āĻāĻāĻāĻž container?
āĻāĻāĻž container-āĻāϰ āĻŽāϤā§āĻ āĻāĻāϰāĻŖ āĻāϰā§āĨ¤ Character-āĻā§āϞ⧠āĻāĻ āϏāĻžāϰāĻŋāϤ⧠āϧāϰ⧠āϰāĻžāĻā§, āĻāϰ
begin()āĻāϰend()āĻāĻā§, āĻāϰ āĻĒā§āϰāϤāĻŋāĻāĻž algorithm āĻāĻāĻžāϰ āĻāĻĒāϰ āĻāϞā§āĨ¤ āĻāĻāĻž āĻāϞāĻžāĻĻāĻžāĻāĻžāĻŦā§ āĻĄāĻŋāĻāĻžāĻāύ āĻāϰāĻž āĻšāϝāĻŧā§āĻāĻŋāϞ, āĻĒāϰ⧠STL āĻĒāϰāĻŋāĻŦāĻžāϰ⧠āϝā§āĻ āĻĻāĻŋāϝāĻŧā§āĻā§āĨ¤ āĻāĻāύā§āϝāĻ āĻāĻāĻžāϰ āĻāĻžāĻā§ āϞā§āĻāĻž āύāĻŋāϝāĻŧā§ āĻāĻžāĻā§āϰ āĻŦāĻžāĻĄāĻŧāϤāĻŋ āĻāĻŋāĻā§ function āĻāĻā§, āϝā§āĻā§āϞ⧠vector-āĻāϰ āύā§āĻāĨ¤
āĻŽā§āϞ āĻāĻĨāĻž
- Sequence container āϤā§āĻŽāĻžāϰ āĻā§āϰāĻŽ āϰāĻžāĻā§; adaptor āĻļā§āϧ⧠āĻāĻ āĻŦāĻž āĻĻā§āĻ āĻŽāĻžāĻĨāĻž āĻā§āϞāĻž āϰāĻžāĻā§; associative container āĻŽāĻžāύ āĻĻā§āĻā§ āϏāĻžāĻāĻžāϝāĻŧāĨ¤
- āĻĒā§āϰāϤāĻŋāĻāĻž container āĻāĻāĻāĻž āĻĒā§āϰāĻļā§āύā§āϰ āĻĻā§āϰā§āϤ āĻāϤā§āϤāϰ āĻĻā§āĻāϝāĻŧāĻžāϰ āĻāύā§āϝ āĻŦāĻžāύāĻžāύā§, āĻāϰ āϏāĻŦ āĻāĻžāĻā§ āϏāĻŦāĻā§āϝāĻŧā§ āĻĻā§āϰā§āϤ āĻāĻŽāύ āĻā§āύ⧠container āύā§āĻāĨ¤
- O(1) n-āĻāϰ āϏāĻā§āĻā§ āĻŦāĻžāĻĄāĻŧā§ āύāĻž, O(log n) āϧā§āϰ⧠āĻŦāĻžāĻĄāĻŧā§, O(n) n-āĻāϰ āϏāĻā§āĻā§ āϏāĻŽāĻžāύ āϤāĻžāϞ⧠āĻŦāĻžāĻĄāĻŧā§āĨ¤
- āĻā§āϰāĻŽ āϰāĻžāĻāĻž container (
set,map) element āϏāĻžāĻāĻŋāϝāĻŧā§ āϰāĻžāĻā§;unordered-āĻā§āϞ⧠āĻāĻĄāĻŧā§ āĻĻā§āϰā§āϤ, āĻāĻŋāύā§āϤ⧠āĻāϰāϏāĻž āĻāϰāĻžāϰ āĻŽāϤ⧠āĻā§āύ⧠āĻā§āϰāĻŽ āϰāĻžāĻā§ āύāĻžāĨ¤ - āĻāĻā§ āĻĒā§āϰāĻļā§āύāĻāĻž āĻŦāĻžāĻā§, āϤāĻžāϰāĻĒāϰ containerāĨ¤
āĻāϰāĻĒāϰ āĻĻā§āĻāĻŦā§ āϏā§āĻ āϏā§āϤā§āĻāĻž, āϝā§āĻāĻž āĻāĻ āϏāĻŦ container-āĻā§ algorithm-āĻāϰ āϏāĻā§āĻā§ āĻŦā§āĻāϧ⧠āϰāĻžāĻā§: iterator, āĻāϰ āϏ⧠āĻā§āĻāĻžāĻŦā§ āĻāϞā§āĨ¤
lesson ā§Š āĻļā§āώ
āĻļā§āώ āĻšāϞ⧠āĻāĻŋāĻšā§āύ āĻĻāĻŋāύ, āĻ āĻā§āϰāĻāϤāĻŋ āĻāĻĒāύāĻžāϰ āϏāĻžāĻĨā§ āĻĨāĻžāĻāĻŦā§āĨ¤
āĻĒāϰā§āϰāĻāĻž: iterator āĻāϰ algorithm: āĻā§āĻāϰā§āĻā§āϞ⧠āĻā§āĻĄāĻŧāĻž āϞāĻžāĻā§ āĻā§āĻāĻžāĻŦā§