---------------
#include <map>
#include <iostream>class IP
{
public:
int a;
int b;
int c;
int d;
};int main() {
map <IP, int> ip_balance;
IP ip;
ip_balance[ip]++;
return 0;
}
-------------------------
(упрощенная вырезка)не компилируется, говорит:
/usr/include/c++/3.2.2/bits/stl_function.h: In member function `bool
std::less<_Tp>::operator()(const _Tp&, const _Tp&) const [with _Tp = IP]':
/usr/include/c++/3.2.2/bits/stl_map.h:224: instantiated from `_Tp& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const _Key&) [with _Key = IP, _Tp = int, _Compare = std::less<IP>, _Alloc = std::allocator<std::pair<const IP, int> >]'
test.cpp:28: instantiated from here
/usr/include/c++/3.2.2/bits/stl_function.h:197: no match for `const IP& < const
IP&' operator
-----------------
понимаю, что вопрос ламерский -ногами не пинать.
Первым должен идти тип ключа, а не тип значения, то есть не
>map <IP, int> ip_balance;
а
map<int, IP> ip_balance;>понимаю, что вопрос ламерский -ногами не пинать.
Чай сам давно догадался...
>Первым должен идти тип ключа, а не тип значения, то есть не>map<int, IP> ip_balance;
>>Чай сам давно догадался...
ээ, так вот мне бы и хотелось иметь в качестчве ключа тип 'IP'
а значением кол-во байтов ушедших на этот ip.
Ох... STL хорошая штука, но если не прочитать сначала по нему книгу, потом книгу по С++, потом снова по STL, то не стоит пытаться его использовать. Проверено на собственном опыте.#include <map>
#include <iostream>class IP
{
friend bool operator < (const IP &ip1, const IP &ip2);public:
int a;
int b;
int c;
int d;};
bool operator < (const IP &ip1, const IP &ip2)
{
return ......;
}
int main(int argc, char *argv[])
{
std::map<IP, int> ip_balance;IP ip;
ip_balance[ip]++;
return 0;
}
Обрати внимание на оператор "меньше", без него std::map работать не будет. Ну и не забывай про конструктор копирования.