Форум программистов, компьютерный форум CyberForum.ru

Составной ключ для std::map - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Классы: как из статического метода обратиться к статической переменной класса http://www.cyberforum.ru/cpp-beginners/thread701473.html
Классы: как из статического метода обратиться к статической переменной класса
C++ Простая очередь вещественных чисел Здравствуйте! Помогите пожалуйста выполнить задание. Сама пробовала, совсем не получается. Создать простую очередь вещественных чисел сна основе статического массива. Реализовать методы : Добавить элемент, удалить элемент, длина очереди. http://www.cyberforum.ru/cpp-beginners/thread701467.html
Ряд Тейлора C++
нужно сделать задание, но ряд Тейлора по вышке еще не проходили а сам не могу понять помогите плиз
Подсчитать сколько раз в строке встречается некоторая буква, введенная с клавиатуры C++
1. Написать программу которая преобразует строку таким образом, что цифры, которые находятся в слове, переносятся в конец строки без изменения порядка следования остальных символов. 2. Ввести n слов с консоли. Найти слово, символы в котором идут в строгом порядке возрастания их кодов. Если таких слов несколько, найти первое из них. 3. Подсчитать сколько раз в данной строке встречается...
C++ Задача на строки http://www.cyberforum.ru/cpp-beginners/thread701450.html
Подскажите, где можно посмотреть пример решения такой задачи, или хотя бы что-то из этого: Даны строки S1 и S2. Сформировать строку S таким образом, чтобы в нее попеременно вошли четные символы строки S1 и нечетные символы строки S2. В качестве длина строки S взять длину меньшей из строк S1 и S2. Сформировать строку S двумя способами: - с использованием функций библиотеки string.h -...
C++ Виртуальный конструктор Подскажите, к каких случаях необходимо использовать виртуальный конструктор, и что это такое?? подробнее

Показать сообщение отдельно
Invader_Zim
Twilight Parasite
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 907

Составной ключ для std::map - C++

18.11.2012, 20:02. Просмотров 748. Ответов 4
Метки (Все метки)

Есть класс. Нужно его сделать ключем для карты.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
class Vertex{
public:
    double X,Y,Z;
    Vertex(double x=0,double y=0, double z=0){X=x;Y=y;Z=z;}
    void Set(double x,double y,double z){X=x;Y=y;Z=z;}
    void print(){printf("X=%f, Y=%f, Z=%f\n",X,Y,Z);}
    double L(){return Sqrt((X*X)+(Y*Y)+(Z*Z));}
    double L(Vertex A){return Sqrt((X*X-2*X*A.X+A.X*A.X)+(Y*Y-2*Y*A.Y+A.Y*A.Y)+(Z*Z-2*Z*A.Z+A.Z*A.Z));}
    bool operator  <(double A){return (X<A && Y<A && Z<A);}
    bool operator  >(double A){return (X>A && Y>A && Z>A);}
    bool operator ==(Vertex A){return (X==A.X && Y==A.Y && Z==A.Z);}
    bool operator  <(Vertex A){return std::tie(X, Y, Z) < std::tie(A.X, A.Y, A.Z);}
    bool operator ==(double A){return (X==A && Y==A && Z==A);}
    bool operator !=(double A){return (X!=A || Y!=A || Z!=A);}
    bool operator !=(Vertex A){return (X!=A.X || Y!=A.Y || Z!=A.Z);}
    void operator +=(Vertex A){X+=A.X;Y+=A.Y;Z+=A.Z;}
    void operator +=(double A){X+=A;Y+=A;Z+=A;}
    void operator *=(Vertex A){X*=A.X;Y*=A.Y;Z*=A.Z;}
    void operator *=(double A){X*=A;Y*=A;Z*=A;}
    void operator /=(double A){X/=A;Y/=A;Z/=A;}
    void operator -=(Vertex A){X-=A.X;Y-=A.Y;Z-=A.Z;}
    void operator  =(double A){X=A;Y=A;Z=A;}
    Vertex operator *(double A){return Vertex(X*A,Y*A,Z*A);}
    Vertex operator -(Vertex A){return Vertex(X-A.X,Y-A.Y,Z-A.Z);}
    Vertex operator +(Vertex A){Vertex Res=*this;Res+=A;return Res;}
    double GetA(){return X/L();}
    double GetB(){return Y/L();}
    double GetC(){return Z/L();}
    bool Null(){if(X==0 && Y==0 && Z==0)return 1;return 0;}
    Vertex Normalize(){double l=Sqrt((X)*(X)+(Y)*(Y)+(Z)*(Z));X/=l;Y/=l;Z/=l;return *this;}
};
int main(){
    Vertex A;
    std::map<Vertex,int> C;
    C[A]=231;
}
вот лог ошибок.
In file included from /usr/lib64/gcc/x86_64-slackware-linux/4.7.1/../../../../include/c++/4.7.1/string:50:0,
from /usr/lib64/gcc/x86_64-slackware-linux/4.7.1/../../../../include/c++/4.7.1/bits/locale_classes.h:42,
from /usr/lib64/gcc/x86_64-slackware-linux/4.7.1/../../../../include/c++/4.7.1/bits/ios_base.h:43,
from /usr/lib64/gcc/x86_64-slackware-linux/4.7.1/../../../../include/c++/4.7.1/ios:43,
from /usr/lib64/gcc/x86_64-slackware-linux/4.7.1/../../../../include/c++/4.7.1/istream:40,
from /usr/lib64/gcc/x86_64-slackware-linux/4.7.1/../../../../include/c++/4.7.1/fstream:40,
from Collision.h:10,
from Actor.h:5,
from main.cpp:12:
/usr/lib64/gcc/x86_64-slackware-linux/4.7.1/../../../../include/c++/4.7.1/bits/stl_function.h: In instantiation of «bool std::less<_Tp>::operator()(const _Tp&, const _Tp&) const [with _Tp = Vertex]»:
/usr/lib64/gcc/x86_64-slackware-linux/4.7.1/../../../../include/c++/4.7.1/bits/stl_map.h:471:2: required from «std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](std::map<_Key, _Tp, _Compare, _Alloc>::key_type&&) [with _Key = Vertex; _Tp = std::basic_string<char>; _Compare = std::less<Vertex>; _Alloc = std::allocator<std:air<const Vertex, std::basic_string<char> > >; std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type = std::basic_string<char>; std::map<_Key, _Tp, _Compare, _Alloc>::key_type = Vertex]»
Collision.h:610:19: required from here
/usr/lib64/gcc/x86_64-slackware-linux/4.7.1/../../../../include/c++/4.7.1/bits/stl_function.h:237:22: ошибка: passing «const Vertex» as «this» argument of «bool Vertex::operator<(Vertex)» discards qualifiers [-fpermissive]

Заранее спасибо за ответы.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru