Based на ваш комментарий, кажется, что вы ant - фактическое отображение (как в математике, из множества A в множество B), которое является общим (не взаимно-однозначным или на). Сначала вы должны концептуально понять, чего хотите. Во-первых, вам требуется сопоставление между классом A (например, int в вашем примере) с B (строка). Давайте шаблон это:
template <class From, class To>
bool isMapped(From A,To B) {
return (//Code representing mapping,say check if A=int->char is in B=string)
}
Теперь отображение значения From
к To
вектора (в математике терминах) диапазон в «To», который достижим (isMapped
) образуют следующее значение:
template<class From, class To>
List<To>& getRange(From value, To range) {
List<To> result();
for (const auto& toValue : range) {
if(isMapped(value,toValue)
result.push_back(toValue);
return result;
Это значение будет возвращено в значение From
в вектор To
с дубликатами, если они отображаются более одного раза в диапазоне. Другой вариант (возможно, лучше) состоял бы в том, чтобы перебирать индексы вместо значений в диапазоне и возвращать булевский вектор длины range
с true
в индексы, в которых отображен From.
Аналогичным образом вам необходимо определить противоположное отображение. Вероятно, вы не могли бы сделать это полностью общим, и, возможно, даже шаблоны не будут соответствовать этому просто - вам нужно будет дать больше информации.
Таким образом, отображение из A в B будет вектором длины вектора A (домена) векторов длины B (домена) с True/False в соответствующих индексах.
Есть, конечно, больше возможностей.
Как вы описали его, 'std :: map>' представляется более подходящим. –
@ πάνταῥεῖ, это вопрос того, что действительно нужно - быстро получить a-> b или b-> a. И, следовательно, возможно, более сложное решение будет очень полезно. Кроме того, ничто не мешает нам иметь те же объекты в B :) – greyxray
Предоставить дополнительную информацию - если в A (B) есть дубликаты, как они будут отображаться на B (A)? Или на самом деле означает, что вы связываете векторные позиции/индексы? Это вопрос о функциях (математических), а затем код. – kabanus