prefacio
Sabemos que la biblioteca STL C ++ no sólo nos proporciona con el vector, la secuencia, lista y otros recipientes convenientes, más importante aún, el paquete STL muchas estructuras de datos, algoritmos y estructuras de datos complejas operaciones. Embalaje variedad de vectores, la lista de la lista el paquete, el mapa y ajustar los paquetes binarios , en estos contenedores, servirá de base para la operación: añadir, eliminar, ordenar, buscar y similares.
1, conjunto
mapa y conjunto son contenedor asociado, que se caracteriza por la adición o eliminación impacto en el iterador es muy pequeña, además de la operación de nodo, casi ningún impacto en otros nodos
conjunto se utiliza para almacenar el mismo tipo de datos, cuyos elementos son solamente un valor clave , que es compatible con la palabra clave eficiente consulta y la inserción de las operaciones, tales como la comprobación de si una palabra clave en el conjunto. Si existía antes de este valor de clave, no se inserta.
La siguiente es una funciones de uso común en el mapa y conjunto, aquí inserto, y encontrar métodos de borrado:
Insertar el mecanismo:
set<int> s;
s.insert(1);
s.insert(1);
s.insert(2);
s.insert(3);
s.insert(3);
s.insert(4);
for (auto e : s)
{
cout << e << " ";
++e;
}
cout << endl;
//或者你可以采用一下输出方式
//set<int> iterator::it;
//for(it=s.begin();it!=s.end();it++)
//{
// cout<<*it<<" ";
//}
// cout<<endl;
Ejecutar tiro:
se puede ver el inserto se fija para reordenar +
Búsqueda Buscar:
set<int>::iterator pos = s.find(3);
if (pos != s.end())
{
cout << "找到啦!"<<endl;
}
tiro ejecutar:
borrado de borrado:
s.erase(pos);
cout << "删除后:" << endl;
for (auto e : s)
{
cout << e << " ";
++e;
}
cout << endl;
Captura de pantalla:
Vaciar claro:
s.clear();
for (auto e : s)
{
cout << e << " ";
++e;
}
Captura de pantalla:
2, mapa
mapa son los mismos que conjunto y el contenedor asociado, el fondo del recipiente que son árbol rojo-negro, de la diferencia es que el mapa no es del valor como una clave y valores de clave están separados
Insertar Insertar
map<string, string> m;
m.insert(make_pair("Apple", "苹果"));
m.insert(make_pair("Pair", "梨"));
m.insert(make_pair("Right", "右边"));
//m.insert(make_pair("Right", "正确"));
m.insert(make_pair("Banana", "香蕉"));
m.insert(make_pair("Orange", "橘子"));
m.insert(make_pair("Grap", "葡萄"));
for(map<string,string>::iterator e=m.begin();e!=m.end();e++)
{
cout << e->first << ":" << e->second << endl;
}
cout << endl;
Encontrar Encontrar
it = m.find("Banana");
if (it != m.end())
{
cout << "找到了!该单词的中文是:" << it->second << endl;
}
else
{
cout << "没有找到!";
}
cout << endl;
BORRAR Para borrar
m.erase(it);
cout << "删除刚找到的元素后,剩余的元素为:" << endl;
map<string, string>::iterator e1;
for (e1 = m.begin(); e1 != m.end(); e1++)
{
cout << e1->first << ":" << e1->second << endl;
}
3, la diferencia entre el mapa y el conjunto de
ajustar las siguientes funciones:
- se establece como el RBTree contenedor subyacente
- El elemento resultante es no sólo un valor de clave, el valor es la clave
- No permita que los valores de clave duplicados
- El elemento resultante de forma automática reordenación +
- Iterador no se puede configurar para cambiar el valor de
las características del mapa son los siguientes:
- En la parte inferior de contenedor como un mapa RBTree
- Todos los elementos están presentes en el valor de clave +
- No permita que las claves duplicadas
- Todos los elementos se ordenan automáticamente por clave
- La clave del mapa no se puede cambiar, pero el valor correspondiente a las teclas puede ser modificado
Ubicado en una aplicación sencilla y el mapa, publicó una relación en este caso, es el número de estadísticas aparecen las frutas y las estadísticas de la fruta antes de TopK el favorito recuento del número de frutos
4, multiset 和 multimap
El nombre chino es multiset conjunto múltiple
versión extendida es en realidad una colección de, la diferencia está en el conjunto, un valor puede aparecer sólo una vez, y en múltiples colecciones, un valor puede aparecer varias veces. Y un número de inserción y eliminación se puede hacer en tiempo O (logN), se puede garantizar que el número en la secuencia se ordena.
MultiMap y apoyado por las mismas operaciones de mapa (excepto multimap no admite subscripting), MultiMap permitir que los elementos duplicados. Los siguientes son el código de interfaz común demuestra la multimap:
#include <map>
#include <string>
#include <iostream>
using namespace std;
int main()
{
///1. 初始化
multimap<int, string> mapStudent;
multimap<int, string>::iterator iter, beg, end;
///2. 添加元素
///multimap不支持下标操作
mapStudent.insert(pair<int, string>(0, "student_one"));
mapStudent.insert(pair<int, string>(0, "student_one_copy"));///一对多
mapStudent.insert(pair<int, string>(1, "student_two"));
mapStudent.insert(pair<int, string>(5, "Fear Kubrick"));
mapStudent.insert(pair<int, string>(2, "Akemi Homura"));
mapStudent.insert(pair<int, string>(-1, "Eren Jaeger"));
mapStudent.insert(pair<int, string>(99, "lin"));
cout << mapStudent.size() << endl;
cout << endl;
///3. 遍历
for (iter = mapStudent.begin(); iter != mapStudent.end(); iter++)
cout << iter->first << " " << iter->second << endl;
cout << endl;
///4. 单键查询与范围查询
///单键查询
int count = mapStudent.count(0);
iter = mapStudent.find(0);
for (int i = 0; i < count; i++, iter++)
cout << iter->first << " " << iter->second << endl;
cout << endl;
///范围查询
beg = mapStudent.lower_bound(1);/// >=1
end = mapStudent.upper_bound(5);/// <=5
for (; beg != end; beg++)
cout << beg->first << " " << beg->second << endl;
cout << endl;
///5. 删除
iter = mapStudent.find(1);
mapStudent.erase(iter);
cout << mapStudent.size() << endl;
for (iter = mapStudent.begin(); iter != mapStudent.end(); iter++)
cout << iter->first << " " << iter->second << endl;
cout << endl;
///6. 判空与清空
if (!mapStudent.empty())
mapStudent.clear();
}