C++ Primer 读书笔记 - 第十章
添加时间:2013-5-28 点击量:
1. map和set中的key是独一的,multimap和multiset中的key可以呈现多次。
2. Whenever we use an associative container, its keys have not only a type, but also an associated comparsion function.
3. The value_type is a pair and that we can chagne the value but not the key member of that pair.
4. 用下标插入元素时,内部操纵是如许的:
- 找key,找不到
- 把key-value pair 插入到map中,此中value是其默认初始化值
- 然后再取出key对应的元素,对value进行赋值
5. 用函数进行插入元素操纵,若是key已存在,则对应的元素对峙不变
函数有一个返回值,是一个pair,机关如下,可经由过程bool值来断定是否插入了。
pair<map<string, int>::iterator, bool> ret = word_count.(make_pair(word, 1));
if (!ret.second)
++ret.first->second;
6. 不要用下标操纵来查找一个元素,一旦这个key不存在的话,它会创建一个key,对应的value为默认初始值。
用find函数,find函数会返回一个指针,用这个指针对元素进行操纵
7. map中的erase函数,当key存在时,就删除,返回1,不存在,不做任何事,返回0.
#include <iostream>
#include <map>
#include <string>
#include <utility>
using namespace std;
class A
{
private:
int age;
public:
A() : age(0) { }
A (int a)
{
age = a;
}
int get_age() const
{
return age;
}
bool operator < (const A &a) const
{
return (age < a.age);
}
};
int main()
{
map<string, int> m;
m.(make_pair(abc, 1));
m.(make_pair(abc, 4));//do nothing
cout << m[abc] << endl;
cout << m.size() << endl;
cout << m.count(abc) << endl;
A a = A(5);
cout << a.get_age() << endl;
A a1(6);
A a2(1);
A a3(2);
A a4(10);
A a5(5);
map<A, int> mapa;
mapa.(make_pair(a1, 1));
mapa.(make_pair(a2, 2));
mapa.(make_pair(a3, 3));
mapa.(make_pair(a4, 4));
mapa.(make_pair(a5, 5));
for (map<A, int>::iterator it = mapa.begin(); it != mapa.end(); ++it) {
cout << A.age: << (it->first).get_age() << \t;
cout << value: << it->second << endl;
}
return 0;
}
8. Just as we cannot change the key part of a map element, the keys in a set are also const.
9. set, multimap, multiset都没有下标操纵
10. map.lower_bound(k)
map.upper_bound(k)
m.equal_range(k) -> return a pair of iterators. first is equivalent to lower_bound(), second is equivalent to upper_bound()
无论对感情还是对生活,“只要甜不要苦”都是任性而孩子气的,因为我们也不完美,我们也会伤害人。正因为我们都不完美,也因为生活从不是事事如意,所以对这些“瑕疵”的收纳才让我们对生活、对他人的爱变得日益真实而具体。—— 汪冰《世界再亏欠你,也要敢于拥抱幸福》
1. map和set中的key是独一的,multimap和multiset中的key可以呈现多次。
2. Whenever we use an associative container, its keys have not only a type, but also an associated comparsion function.
3. The value_type is a pair and that we can chagne the value but not the key member of that pair.
4. 用下标插入元素时,内部操纵是如许的:
- 找key,找不到
- 把key-value pair 插入到map中,此中value是其默认初始化值
- 然后再取出key对应的元素,对value进行赋值
5. 用函数进行插入元素操纵,若是key已存在,则对应的元素对峙不变
函数有一个返回值,是一个pair,机关如下,可经由过程bool值来断定是否插入了。
pair<map<string, int>::iterator, bool> ret = word_count.(make_pair(word, 1));
if (!ret.second)
++ret.first->second;
6. 不要用下标操纵来查找一个元素,一旦这个key不存在的话,它会创建一个key,对应的value为默认初始值。
用find函数,find函数会返回一个指针,用这个指针对元素进行操纵
7. map中的erase函数,当key存在时,就删除,返回1,不存在,不做任何事,返回0.
#include <iostream>
#include <map>
#include <string>
#include <utility>
using namespace std;
class A
{
private:
int age;
public:
A() : age(0) { }
A (int a)
{
age = a;
}
int get_age() const
{
return age;
}
bool operator < (const A &a) const
{
return (age < a.age);
}
};
int main()
{
map<string, int> m;
m.(make_pair(abc, 1));
m.(make_pair(abc, 4));//do nothing
cout << m[abc] << endl;
cout << m.size() << endl;
cout << m.count(abc) << endl;
A a = A(5);
cout << a.get_age() << endl;
A a1(6);
A a2(1);
A a3(2);
A a4(10);
A a5(5);
map<A, int> mapa;
mapa.(make_pair(a1, 1));
mapa.(make_pair(a2, 2));
mapa.(make_pair(a3, 3));
mapa.(make_pair(a4, 4));
mapa.(make_pair(a5, 5));
for (map<A, int>::iterator it = mapa.begin(); it != mapa.end(); ++it) {
cout << A.age: << (it->first).get_age() << \t;
cout << value: << it->second << endl;
}
return 0;
}
8. Just as we cannot change the key part of a map element, the keys in a set are also const.
9. set, multimap, multiset都没有下标操纵
10. map.lower_bound(k)
map.upper_bound(k)
m.equal_range(k) -> return a pair of iterators. first is equivalent to lower_bound(), second is equivalent to upper_bound()
无论对感情还是对生活,“只要甜不要苦”都是任性而孩子气的,因为我们也不完美,我们也会伤害人。正因为我们都不完美,也因为生活从不是事事如意,所以对这些“瑕疵”的收纳才让我们对生活、对他人的爱变得日益真实而具体。—— 汪冰《世界再亏欠你,也要敢于拥抱幸福》