Есть ли более эффективный способ побайтного сравнения данных, чем использование сравнения
оператор контейнера списка C ++?
Я должен сравнить [большой? 10 кБайт <размер <500 кБайт] объем данных для побайтной проверки целостности внешних устройств хранения. </p>
Поэтому я читаю файлы побайтно и сохраняю значения в списке неподписанных символов.
Ресурсы этого списка обрабатываются 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 кБайт для сравнения содержимого потребуется до двух секунд. Увеличивается и уменьшается с размером файла ....
Есть ли более эффективный способ сделать это сравнение? Это проблема использованного контейнера?