Эффективное сравнение данных побайтно (с C ++)

Есть ли более эффективный способ побайтного сравнения данных, чем использование сравнения оператор контейнера списка C ++?

Я должен сравнить [большой? 10 кБайт

Поэтому я читаю файлы побайтно и сохраняю значения в списке неподписанных символов. Ресурсы этого списка обрабатываются shared_ptr , так что я могу передать его в программе без необходимости беспокоиться о размере списка

typedef boost::shared_ptr< list< unsigned char > > = contentPtr;
namespace boost::filesystem = fs;

contentPtr GetContent( fs::path filePath ){
 contentPtr actualContent (new list< unsigned char > );       
 // Read the file with a stream, put read values into actual content
return actualContent;

Это делается дважды, потому что есть всегда две копии файла. Содержимое этих двух файлов должно сравниваться, и выдается исключение, если обнаружено несоответствие.

void CompareContent() throw( NotMatchingException() ){
 // this part is very fast, below 50ms
 contentPtr contentA = GetContent("/fileA");
 contentPtr contentB = GetContent("/fileB");
 // the next part takes about 2secs with a file size of ~64kByte
 if( *contentA != *contentB )
      throw( NotMatchingException() );
}

Моя проблема заключается в следующем:
С увеличением размера файла сравнение списков происходит очень медленно. При работе с файлами размером около 100 кБайт для сравнения содержимого потребуется до двух секунд. Увеличение и уменьшение с размером файла ....

Есть ли более эффективный способ сделать это сравнение? Это проблема используемого контейнера?

6
задан Peter Mortensen 21 August 2012 в 19:25
поделиться