Мои извинения за очень основной вопрос, я новичок в Rcpp и C++ из R.Нахождение индекса строки внутри поля строк
У меня есть поле (arma::field
), который я инициализируется держать нити (arma::field<std::string> my_vector
). У меня также есть строка std::string id
, которая находится где-то внутри поля строк, и мне хотелось бы найти позицию, где она находится. Я привык делать это с помощью векторов и чисел похожи на ниже:
arma::vec fun(arma::vec input_vector){
// Find where vector equals 5 (for example)
uvec index = arma::find(input_vector == 5);
return index;
}
Первоначально я пытался сделать то же самое, но, учитывая строку вместо числа для сравнения:
arma::uvec fun(arma::vec input_vector, std::string id){
// Find where vector string id
uvec index = arma::find(input_vector == id);
return index;
}
Это возвращает ошибку
error: invalid operands to binary expression ('arma::vec' (aka 'Col<double>')
and 'std::string' (aka 'basic_string<char, char_traits<char>, allocator<char> >'))
, который имеет смысл, так как вектор не был инициализирован содержать строки. Хотя я не думаю, что вектор может быть инициализирован, чтобы содержать строки, потому что когда я попытался arma::vec<std::string>
, это дает беспорядок ошибок.
Это приведет меня к полям, которые могут содержать намного больше видов переменных.
arma::uvec fun(arma::field<std::string> input_field, std::string id){
// Find where vector equals 5 (for example)
uvec index = arma::find(input_field == id);
return index;
}
Однако это возвращает
error: invalid operands to binary expression ('arma::field<std::string>' and
'std::string' (aka 'basic_string<char, char_traits<char>, allocator<char> >'))
Я попытался strcmp
, а также, который также бросил ошибку
error: no viable conversion from 'arma::field<std::string>' to 'const char *'
Это приводит меня спросить, как я могу найти положение строка внутри поля?
Я открыт для изменения типов вокруг чего-то, что работает лучше, я подозреваю, что использование std::vector
может работать лучше или, возможно, другого типа, о котором я не слышал. Однако мои первые эксперименты не были очень успешными. Если у кого-то есть какие-то намеки, в каком направлении идти, это было бы очень признательно.
Edit: Уточнено, что find
был arma::find
вместо std::find
, как это было очень не понятно.
Спасибо за совет. Эта часть кода находится в пределах приличного размера, поэтому, хотя цикл через каждый элемент определенно звучит как жизнеспособное решение, хотя, вероятно, и не в этом случае. Я рассмотрю идею ключа/карты. Всего наилучшего. –
@ChrisC Я рассмотрю это позже сегодня с примером кода. Кроме того, циклы на C++ являются ** не ** злыми. – coatless
Цените помощь @Coatless. Не торопитесь, я уверен, что вы очень заняты своими делами. –