Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
Twilight Parasite
 Аватар для Invader_Zim
154 / 150 / 7
Регистрация: 21.07.2011
Сообщений: 908

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

18.11.2012, 20:02. Показов 2632. Ответов 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]

Заранее спасибо за ответы.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.11.2012, 20:02
Ответы с готовыми решениями:

Std::map ключ из нескольких значений (одно из которых может быть не заполненно)
Добрый день. Есть следующий вопрос. У меня есть некие 2 транзакции, которые необходимо связать между собой. Связываю я их по id,...

Возможно ли создать контейнер std::map, в котором в качестве значения была бы ссылка на std::map?
Здравствуйте. Возможно ли создать контейнер std::map, в котором в качестве значения была бы ссылка на std map? Например: std::map...

Emplace в std::map. Как добавить элемент в std::map без копирования?
здравствуйте... есть ли способ не писать так: std::map&lt;int, char&gt; ksa; ksa.emplace(std::piecewise_construct, ...

4
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
18.11.2012, 20:08
операторы отношения изменяют состояние класса?
нет
тогда почему какого дьявола они не константные?
0
Twilight Parasite
 Аватар для Invader_Zim
154 / 150 / 7
Регистрация: 21.07.2011
Сообщений: 908
18.11.2012, 20:15  [ТС]
Jupiter, та-же фигня, что и была.
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
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));}
    const bool operator  <(double A){return (X<A && Y<A && Z<A);}
    const bool operator  >(double A){return (X>A && Y>A && Z>A);}
    const bool operator ==(Vertex A){return (X==A.X && Y==A.Y && Z==A.Z);}
    const bool operator  <(Vertex A){return std::tie(X, Y, Z) < std::tie(A.X, A.Y, A.Z);}
    const bool operator ==(double A){return (X==A && Y==A && Z==A);}
    const bool operator !=(double A){return (X!=A || Y!=A || Z!=A);}
    const 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;}
};
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
18.11.2012, 20:17
Invader_Zim, добавленные вами const никаким образом не относятся к проблеме, указанной Jupiter-ом.
0
Twilight Parasite
 Аватар для Invader_Zim
154 / 150 / 7
Регистрация: 21.07.2011
Сообщений: 908
18.11.2012, 20:20  [ТС]
все, решил.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.11.2012, 20:20
Помогаю со студенческими работами здесь

std::map find. Получить ключ(элемент) и как записать все данные при объявлений?
Вопрос первый: как получить ключ контейнера map по данным? например: // id, name std::map&lt;int, string&gt; BookMap; BookMap...

Очистка map и перевернутого std::map c std::greater
Написала я программу, которая заполняет два контейнера map. a,b. вывод программы такой 11 a: 0.00000000 - 0.00000000 a: 0.10000000...

Стоит ли очищать в деструкторе std::map , std::vecotor?
У меня ещё один нубский вопрос :) Вот если в классе объявлены мапы и вектора, которые по ходу программы как то заполняются, нужно ли мне...

std::map, std::vector и порядок обхода коллекции
Здравствуйте, уважаемые! Вопрос следующий - если я сохраняю какие-то значения в map или вектор, то всегда ли я буду получать тот-же...

Std::unordered_multimap<std::string, int> map
Приветствую. Как можно получить только &quot;уникальный&quot; ключ в контейнере? std::unordered_multimap&lt;std::string, int&gt; map; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru