2015-01-26 6 views
-2

У меня есть два массива, и я хочу сравнить их и найти все различия. Массивы выглядит как:Как сравнить два массива?

  • ИмяГруппы
  • Пользователи
  • пользователя
  • пользователя
  • Группа
  • Пользователь

Etc ...

Когда петля найти «Пользователи «это ld принимает предыдущий элемент как имя группы (поскольку несколько групп являются членами других групп).

Мой реальный код:

for(auto a = 0; a < 100; a++) 
{ 
    const auto data1 = TabList1[a]; 

    for(auto b = 0; b < 100; b++) 
    { 
     const auto data2 = TabList2[b]; 

     if (data1 == 'Members') 
     { 
      a = a - 1; 
      string = TabList1[a]; 
      a = a + 1; 
     } 
     if (data1 != data2) 
     { 
      println "Not match!"; 
     } 
    } 
} 

Конечно, это больше похоже на псевдокоде. Кто-нибудь может сказать, что не так в этом коде?

+1

Почему вы думаете, что что-то не так? Определите это и оттуда оттуда. –

+0

Используя [оператор сравнения] (http://en.cppreference.com/w/cpp/container/array/operator_cmp) в ['std :: array'] (http://en.cppreference.com/ w/cpp/container/array). –

+0

Я имею в виду - это хороший способ сравнить этот два массива (принимая данные и т. Д.)? –

ответ

0

«У меня есть два массива, и я хочу сравнить их и найти все различия».

Это должно быть довольно просто. Это предполагает, что ваши массивы имеют одинаковый размер:

for(auto i = std::mismatch(std::begin(TabList1), std::end(TabList1), std::begin(TabList2); 
    i.first != std::end(Tablist1); 
    i = std::mismatch(std::next(i.first), std::end(TabList1), std::next(i.second)){ 
    //i is a pair of iterators. 
    //The first iterator points to the element of TabList1 that mismatched 
    //The second iterator points to the element of TabList2 that mismatched 
    //You should operate on those pointers here. 
} 

«Когда петля найти„Пользователи“. Он должен принять предыдущий элемент в качестве названия группы (потому что немногие группы являются членами других групп)»

Предполагается, что TabList1 содержит не менее 1 элемента.

for(auto i = std::find(std::next(std::begin(TabList1)),std::end(TabList1), "Members"); 
    i != std::end(TabList1); 
    i = std::find(std::next(i), std::end(TabList1), "Members")){ 
    if(*std::prev(i) != "GroupName"){ 
     //std::prev(i) holds an iterator to what should have been a "GroupName" 
     //i holds an iterator to "Members" 
     //You should operate on these pointers here 
    } 
} 
+0

Да, я хочу проверить это, потому что в будущем я хочу изменить "Не соответствует!" сообщение «Пользователь X нашел/не нашел в группе Y» –

+0

@ adam.cziker Оба эти метода выглядят как вещи, которые должны выполняться только при отладке или для проверки ввода пользователя. Если вы собираетесь проверять оба эти вопроса каждый раз, вы, вероятно, будете лучше с простым: 'for (auto i = 0; i