если Вы не документируете перечисления в столбце описания схемы так, чтобы я мог выяснить то, что эти '5' находится в этом:
Select name from peeps where accountStatusId = 5
тогда делают это
Использование таблица для перечисления поля. например:
Select name
from peeps p
join accountStatus s
on p.accountStatusID = s.asid
where s.accountStatus = 'ActiveDude'
Если вам действительно нужно скрыть значение, которое возвращает «настоящий» итератор (например, потому что вы хотите использовать свой итератор-ключ со стандартными алгоритмами, чтобы они работали с ключами, а не парами), а затем взгляните на transform_iterator .
[Совет: просматривая документацию по Boost для нового класса, сначала прочтите "примеры" в конце. Тогда у вас есть шанс выяснить, о чем, черт возьми, все остальное говорит: -)]
Я знаю, что это не ответ на ваш вопрос, но один из вариантов, который вы, возможно, захотите посмотреть, - это просто наличие двух векторов с одним и тем же индексом, являющихся «связанной» информацией.
..
std::vector<std::string> vName;
std::vector<int> vNameCount;
если вы хотите подсчитать имена по имени, вы просто быстро выполните цикл for по vName.size (), и когда вы найдете его, это индекс для vNameCount, который вы ищете.
Конечно, это может не дать вам всей функциональности карты, и в зависимости от этого может быть лучше, а может и нет, но это может быть проще, если вы не знаете ключей и не должны добавлять слишком много обработки.
Просто помните, что когда вы добавляете / удаляете из одного, вы должны делать это из другого, иначе все станет сумасшедшим, хех: P
Если вам нужен итератор, который просто возвращает ключи, вам нужно обернуть итератор карты в ваш собственный класс, который предоставляет желаемый интерфейс. Вы можете объявить новый класс итератора с нуля, например здесь , или использовать существующие вспомогательные конструкции. Этот ответ показывает, как использовать Boost transform_iterator
, чтобы обернуть итератор в итератор, который возвращает только значения / ключи.
Вы хотите это сделать?
std::map<type,type>::iterator iter = myMap.begin();
std::map<type,type>::iterator iter = myMap.end();
for(; iter != endIter; ++iter)
{
type key = iter->first;
.....
}
карта является ассоциативным контейнером. Следовательно, итератор - это пара ключей val. ЕСЛИ вам нужны только ключи, вы можете игнорировать часть значения из пары.
for(std::map<Key,Val>::iterator iter = myMap.begin(); iter != myMap.end(); ++iter)
{
Key k = iter->first;
//ignore value
//Value v = iter->second;
}
EDIT: : Если вы хотите вывести наружу только ключи, вы можете преобразовать карту в вектор или ключи и выставить.
Вы можете
std :: map :: iterator
std :: transform
из ваших map.begin ()
до map.end ()
с boost :: bind (& pair :: second, _1)
функтором -> second
при повторении с циклом for
.