Как сохранить результат в Map в C ++, а затем повторить его, а затем распечатать результат?

Я начал работать с C++ libcql библиотека для Cassandra .. Я пытаюсь получить данные из Cassandra, используя C ++ с библиотекой libcql ..

Всякий раз, когда я иду в командной строке, используя cqlsh и выберите, как это —

select record_name, record_value from profile_user where user_id = '1';

Я всегда получаю вывод ниже в командной строке cql и в котором record_name и record_value на самом деле столбец TEXT datatype which is UTF-8 encoded string,

 record_name | record_value
-------------+--------------
e1 |        hello
e2 |        hello

Сейчас переходим на мир C ++

Теперь я пытаюсь извлечь то же самое из C++ libcql library… Я буду выполнять тот же запрос выбора выше в C ++, и я хочу вернуть карту, которая будет иметь e1, e2 as the key а также HELLO as there value inside that map… можно это сделать в C ++?

/**
* This method will retrieve the data from Cassandra..
* And then call print_rows method to print it out on the console
*/
void get_attributes(string id){
try{

// some code

//Connection open
connection_open();

execute_query("USE testks;");

//this will give me the result back of the select query
cql_result_t& result = execute_query("select * from profile_user where key ='"+id+"';");

// and this is printing it out on the console
print_rows(result);

// some code
} catch (int e){
// some code here
}
}

Ниже приведен метод, который выводит результаты на консоль после запуска моей программы на C ++ —

/**
* This method prints out the result on the console..    *
*
*/
void print_rows(cql::cql_result_t& result) {
while (result.next()) {
for (size_t i = 0; i < result.column_count(); ++i) {
cql::cql_byte_t* data = NULL;
cql::cql_int_t size = 0;
result.get_data(i, &data, size);
std::cout.write(reinterpret_cast<char*>(data), size);
std::cout << " | ";
}
std::cout << std::endl;
}
}

Результат, который я вижу на консоли после запуска моей вышеупомянутой программы на C ++, выглядит примерно так:

e1 | hello |
e2 | hello |

Но то, что я ищу, — Сохраните результат в Map в C ++ таким образом, чтобы ключ был e1 and e2 на карте .. И значение для них должно быть HELLO в той же карте … а затем итерации карты и распечатать результат в C ++? Это возможно сделать с текущим кодом, который у меня есть?

Если да, может ли кто-нибудь привести простой пример по этому вопросу? Спасибо…

По сути, это вопрос C ++. Просто извлеките данные и поместите их в карту … Но проблема, с которой я сталкиваюсь, заключается в том, что мой опыт полностью связан с Java, поэтому у меня немного трудных моментов, чтобы понять, как это сделать. ..

Я немного изменил дизайн таблицы в этом вопросе на свой оригинальный вопрос Вот вместо использования коллекции, теперь я использую составные ключи ..

Но если я смогу найти решение моего предыдущего вопроса, то я пойду с этим подходом, иначе я буду идти с этим подходом.

Спасибо за помощь…

Обновить код: —

С изменением ниже, он всегда печатает первый результат дважды? Не уверен почему?

void print_rows(cql::cql_result_t& result){
while (result.next()) {
for (size_t i = 0; i < result.column_count(); ++i) {
cql::cql_byte_t* data = NULL;
cql::cql_int_t size = 0;
result.get_data(i, &data, size);
//  std::cout.write(reinterpret_cast<char*>(data), size);
//  std::cout << " | ";

if(!flag) {

key = reinterpret_cast<char*>(data);
flag = true;

} else if(flag) {

value = reinterpret_cast<char*>(data);
m[key] = value;
flag = false;
}

}

std:map<std::string, std::string>::const_iterator it = m.begin();

for (;it!=m.end(); ++it ) {

std::cout << it->first << " : " << it->second << std::endl;
}

std::cout << std::endl;
}
}

e1 : hello

e1 : hello
e2 : hello

Что-то не так я здесь делаю?

-1

Решение

Похоже, что ваши ключи и значения чередуются на каждом проходе,

Вы можете иметь что-то вроде этого:

bool flag=false;
std::map<std::string, std::string> m;
std::string key,value;

void print_rows(cql::cql_result_t& result) {
while (result.next()) {
//...
if(!flag)
{
key=reinterpret_cast<char*>(data);
flag= true;
}
else if(flag)
{
value=reinterpret_cast<char*>(data);
m[key] = value;
flag = false;
}
// ....
}
//...
}

Теперь, чтобы пересечь карту:

std::map<std::string, std::string>::const_iterator it=m.begin();

for(;it!=m.end();++it)
std::cout << it->first << " : " << it->second << std::endl;

Или, если вы используете C ++ 11:

for(const auto &it:m)
std::cout << it.first << " : "<< it.second << std::endl;
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector